<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" >

	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
	<link href="https://fonts.googleapis.com/css?family=Roboto+Mono" rel="stylesheet">
	<link href="https://fonts.googleapis.com/css?family=Cousine|Inconsolata" rel="stylesheet">
	<link rel="shortcut icon" type="image/png" href="/favicon.png">

	
	<link rel="stylesheet" href="/css/style.css">
	<link rel="stylesheet" href="/css/css/fontawesome-all.min.css">
	<script src="/js/main.js"></script>
	

	<!-- Begin Jekyll SEO tag v2.1.0 -->
<title>Search - Steem Developer</title>
<meta property="og:title" content="Search" />
<meta name="description" content="Steem Developer Documentation." />
<meta property="og:description" content="Steem Developer Documentation." />
<link rel="canonical" href="https://developer.steem.io/search/" />
<meta property="og:url" content="https://developer.steem.io/search/" />
<meta property="og:site_name" content="Steem Developer" />
<script type="application/ld+json">
{"@context": "http://schema.org",
"@type": "WebPage",
"headline": "Search",
"description": "Steem Developer Documentation.",
"url": "https://developer.steem.io/search/"}</script>
<!-- End Jekyll SEO tag -->


	
</head>
<body>
<header>
	<h1>
		<button type="button" class="open-nav" id="open-nav"></button>
		<a href="/"  class="logo-link"><img src="/images/logotype_white.svg" height="40" alt="Steem Developer logo"></a>
	</h1>

	
	<form action="/search/" method="get">
		<input type="text" name="q" id="search-input" placeholder="Search">
		<input type="submit" value="Search" style="display: none;">
	</form>
	

	<div id="sidebar" class="sidebar">
	
	
	
		
    <section class="pnl-main-nav-section main-nav-section" url="/">
		<h6 class="ctrl-nav-section title">Introduction</h6>
		<ul class="cont-nav-section content">
			
				
					
					
						
						<li><a href="/#introduction-welcome">Welcome to Steem</a></li>
						
					
				
			
		</ul>
	</section>
	
		
    <section class="pnl-main-nav-section main-nav-section" url="/quickstart/">
		<h6 class="ctrl-nav-section title">Quickstart</h6>
		<ul class="cont-nav-section content">
			
				
					
					
						
						<li><a href="/quickstart/#quickstart-choose-library">Choose Library</a></li>
						
					
						
						<li><a href="/quickstart/#quickstart-steemd-nodes">steemd Nodes</a></li>
						
					
						
						<li><a href="/quickstart/#quickstart-testnet">Steem Testnet</a></li>
						
					
				
			
		</ul>
	</section>
	
		
    <section class="pnl-main-nav-section main-nav-section" url="/tutorials/">
		<h6 class="ctrl-nav-section title">Tutorials</h6>
		<ul class="cont-nav-section content">
			
				
					
						<li><a href="/tutorials/#tutorials-javascript">Javascript</a></li>
					
				
					
						<li><a href="/tutorials/#tutorials-python">Python</a></li>
					
				
					
						<li><a href="/tutorials/#tutorials-ruby">Ruby</a></li>
					
				
					
						<li><a href="/tutorials/#tutorials-recipes">Recipes</a></li>
					
				
			
		</ul>
	</section>
	
		
    <section class="pnl-main-nav-section main-nav-section" url="/services/">
		<h6 class="ctrl-nav-section title">Services</h6>
		<ul class="cont-nav-section content">
			
				
					
					
						
						<li><a href="/services/#services-steemit">Steemit.com</a></li>
						
					
						
						<li><a href="/services/#services-steemconnect">SteemConnect</a></li>
						
					
						
						<li><a href="/services/#services-jussi">jussi</a></li>
						
					
						
						<li><a href="/services/#services-imagehoster">ImageHoster</a></li>
						
					
						
						<li><a href="/services/#services-sbds">SBDS</a></li>
						
					
				
			
		</ul>
	</section>
	
		
    <section class="pnl-main-nav-section main-nav-section" url="/apidefinitions/">
		<h6 class="ctrl-nav-section title">Appbase API</h6>
		<ul class="cont-nav-section content">
			
				
					
					
						
						<li><a href="/apidefinitions/#apidefinitions-condenser-api">Condenser Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-account-by-key-api">Account By Key Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-broadcast-ops-comment">Broadcast Ops Comment</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-account-history-api">Account History Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-database-api">Database Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-follow-api">Follow Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-jsonrpc">Jsonrpc</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-market-history-api">Market History Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-network-broadcast-api">Network Broadcast Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-tags-api">Tags Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-witness-api">Witness Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-block-api">Block Api</a></li>
						
					
						
						<li><a href="/apidefinitions/#apidefinitions-broadcast-ops">Broadcast Ops</a></li>
						
					
				
			
		</ul>
	</section>
	
		
    <section class="pnl-main-nav-section main-nav-section" url="/community/">
		<h6 class="ctrl-nav-section title">Community</h6>
		<ul class="cont-nav-section content">
			
				
					
					
						
						<li><a href="/community/#community-overview">Overview</a></li>
						
					
						
						<li><a href="/community/#community-resources">Resources</a></li>
						
					
						
						<li><a href="/community/#community-developeradvocate">Sharing & Help</a></li>
						
					
				
			
		</ul>
	</section>
	
		
    <section class="pnl-main-nav-section main-nav-section" url="/glossary/">
		<h6 class="ctrl-nav-section title">Glossary</h6>
		<ul class="cont-nav-section content">
			
				
					
					
						
						<li><a href="/glossary/#glossary-chain-basics">Chain Basics</a></li>
						
					
						
					
						
						<li><a href="/glossary/#glossary-governance">Governance</a></li>
						
					
						
						<li><a href="/glossary/#glossary-transactions">Transactions</a></li>
						
					
						
						<li><a href="/glossary/#glossary-api">API</a></li>
						
					
						
						<li><a href="/glossary/#glossary-market">Market</a></li>
						
					
				
			
		</ul>
	</section>
	
</div>


	<!--<p class="copyright">-->
	<!--<a href="https://steemit.com.com/">-->
	<!--steemit-->
	<!--</a>-->
	<!--</p>-->
	<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
</header>
<div class="main" id="top">
	<div class="hero">
		<h1 class="hero__h1">Steem Developer Portal </h1>
		
		<img class="hero__img" src="/images/hero.png">
		
	</div>
	<div class="search-page">
	<h2>Search Results</h2>

	<p><span id="search-process">Loading</span> results <span id="search-query-container" style="display: none;">for "<strong id="search-query"></strong>"</span></p>
	<ul id="search-results"></ul>
</div>

<script>
	window.data = {
		
			
				
					
						
						
						"apidefinitions-account-by-key-api": {
							"id": "apidefinitions-account-by-key-api",
							"title": "Account By Key Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsaccount-by-key-api",
							"content": "Used to lookup account information based on a key. These AppBase API methods are still under development and subject to change.\n\n\n\nSince: HF16\n\n\n\n\naccount_by_key_api.get_key_references \nReturns all accounts that have the key associated with their owner or active authorities.\nQuery Parameters JSON \n{\"keys\": []}\n\n\nExpected Response JSON \n{\"accounts\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"account_by_key_api.get_key_references\", \"params\":{\"keys\":[\"STM5jZtLoV8YbxCxr4imnbWn61zMB24wwonpnVhfXRmv7j6fk3dTH\"]}, \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-account-history-api": {
							"id": "apidefinitions-account-history-api",
							"title": "Account History Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsaccount-history-api",
							"content": "Used to lookup account history information. These AppBase API methods are still under development and subject to change.\n\n\n\n\n\n\naccount_history_api.get_account_history \nReturns a history of all operations for a given account.\nQuery Parameters JSON \n{\n  \"account\": \"\",\n  \"start\": \"18446744073709551615\",\n  \"limit\": 1000\n}\n\n\nExpected Response JSON \n{\"history\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"account_history_api.get_account_history\", \"params\":{\"account\":\"steemit\", \"start\":1000, \"limit\":1000}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"account_history_api.get_account_history\", \"params\":{\"account\":\"steemit\", \"start\":-1, \"limit\":10000}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\naccount_history_api.get_ops_in_block \nReturns all operations contained in a block.\nQuery Parameters JSON \n{\"block_num\": 0, \"only_virtual\": false}\n\n\nExpected Response JSON \n{\"ops\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"account_history_api.get_ops_in_block\", \"params\":{\"block_num\":1,\"only_virtual\":false}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"account_history_api.get_ops_in_block\", \"params\":{\"block_num\":5443322,\"only_virtual\":true}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\naccount_history_api.get_transaction \nReturns the details of a transaction based on a transaction id.\nQuery Parameters JSON \n{\"id\": \"0000000000000000000000000000000000000000\"}\n\n\nExpected Response JSON \n{\n  \"ref_block_num\": 0,\n  \"ref_block_prefix\": 0,\n  \"expiration\": \"1970-01-01T00:00:00\",\n  \"operations\": [],\n  \"extensions\": [],\n  \"signatures\": [],\n  \"transaction_id\": \"0000000000000000000000000000000000000000\",\n  \"block_num\": 0,\n  \"transaction_num\": 0\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"account_history_api.get_transaction\", \"params\":{\"id\":\"6fde0190a97835ea6d9e651293e90c89911f933c\"}, \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-block-api": {
							"id": "apidefinitions-block-api",
							"title": "Block Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsblock-api",
							"content": "Used to query values related to the block plugin. These AppBase API methods are still under development and subject to change.\n\n\n\n\n\n\nblock_api.get_block \nRetrieve a full, signed block of the referenced block, or null if no matching block was found.\n\nParameters:\n\n\n  block_num:int\n\n\n\n  \n    \n      block_num (int)\n       \n    \n  \n  \n    \n      1\n      Queries the very first block.\n    \n    \n      8675309\n      Queries block number 8,675,309.\n    \n    \n      62396745\n      Queries block number 62,396,745.\n    \n  \n\n\nQuery Parameters JSON \n{\"block_num\": 0}\n\n\nExpected Response JSON \n{\n  \"block\": {\n    \"previous\": \"\",\n    \"timestamp\": \"1970-01-01T00:00:00\",\n    \"witness\": \"\",\n    \"transaction_merkle_root\": \"\",\n    \"extensions\": [],\n    \"witness_signature\": \"\",\n    \"transactions\": [],\n    \"block_id\": \"\",\n    \"signing_key\": \"\",\n    \"transaction_ids\": []\n  }\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"block_api.get_block\", \"params\":{\"block_num\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"block_api.get_block\", \"params\":{\"block_num\":8675309}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"block_api.get_block\", \"params\":{\"block_num\":62396745}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nblock_api.get_block_header \nRetrieve a block header of the referenced block, or null if no matching block was found.\n\nParameters:\n\n\n  block_num:int - Height of the block whose header should be returned\n\n\n\n  \n    \n      block_num (int)\n       \n    \n  \n  \n    \n      1\n      Queries the block headers for the very first block.\n    \n    \n      8675309\n      Queries block headers for block number 8,675,309.\n    \n    \n      62396745\n      Queries block headers for block number 62,396,745.\n    \n  \n\n\nQuery Parameters JSON \n{\"block_num\": 0}\n\n\nExpected Response JSON \n{\n  \"header\": {\n    \"previous\": \"\",\n    \"timestamp\": \"1970-01-01T00:00:00\",\n    \"witness\": \"\",\n    \"transaction_merkle_root\": \"\",\n    \"extensions\": []\n  }\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"block_api.get_block_header\", \"params\":{\"block_num\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"block_api.get_block_header\", \"params\":{\"block_num\":8675309}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"block_api.get_block_header\", \"params\":{\"block_num\":62396745}, \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-broadcast-ops-comment": {
							"id": "apidefinitions-broadcast-ops-comment",
							"title": "Broadcast Ops Comment",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsbroadcast-ops-comment",
							"content": "This is a brief overview of the parameters allowed and values passed by the ‘comment’ operation\n\nAdditional info for API definitions is available on the dev portal\n\nPurpose:\n\nA broadcast operation on Steem is a way of expressing intention on the blockchain.\nThey have types, like comment in this instance, and they parameters (like author) depending on what their intended use is\nIn other words, the broadcast.comment operation creates a post or a comment on a current post, on the steem blockchain.\n\nRules:\n\n  The “title” must not be longer than 256 bytes\n  The “title” must be UTF-8\n  The “body” must be larger than 0 bytes\n  The “body” much also be UTF-8\n\n\nParameters:\n\n  parent_author - the author that comment is being submitted to, when posting a new blog this is an empty string\n  parent_permlink - specific post that comment is being submitted to, when posting a new blog this is an empty string\n  author - author of the post/comment being submitted (account name)\n  permlink - unique string identifier for the post, linked to the author of the post\n  title - human readable title of the post being submitted, this is often blank when commenting\n  body - body of the post/comment being submitted, or diff-match-patch when updating\n  json_metadata - JSON object string\n\n\nAdditional Parameter Definitions:\n\n  permlink:\n  Two authors may have the same permlink as it’s unique to the author only. For example, there could be two authors, alice and bob, and both could have a permlink of firstpost\n  json_metadata:\nThere is no blockchain enforced validation on json_metadata, but the community has adopted a particular structure.\n  It should contain a JSON object with the following keys:\n    \n      tags - An array of up to 5 strings. Although the blockchain will accept more than 5, the tags plugin only looks at the first five\n      app - A user agent style application identifier. Typically app_name.version, e.g. steemit/0.1\n      format - The format of the body, e.g. markdown\n      In addition to the above keys, application developrs are free to add any other keys they want to help manage the content they broadcast.\n    \n  \n\n\nA typical comment operation would look similar to the below:\n\n  const post = {\n    author :\"Joe\",\n    title :\"A post by Joe\",\n    body :\"Look at my awesome post\",\n    parent_author :'',\n    parent_permlink :\"steem\",\n    permlink :\"a-post-by-joe\",\n    json_metadata :\"{\\\"tags\\\":[\\\"steemit\\\",\\\"example\\\",\\\"tags\\\"]}\",\n  };\n\n\nIn which case the complete broadcast operation would look like this:\n\n  broadcast.comment(post, privatePostingKey)\n\n\nWith privatePostingKey being the private posting key of the author broadcasting the comment or post\n\nCreate_vs_Update:\n\nWhen a comment is first broadcast, the permlink must be unique for the author.\n  Otherwise, it is interpreted as an update operation. Updating will either replace the entire body with the latest operation or patch the body if using diff-match-patch.\n\nFor example, if we have a paragraph that has already been broadcast:\n\n“It’s been quite a lot of fun working with these wonderful folk at Steemit, Inc”\n\nAnd we want to change it to:\n\n“It’s been quite a lot of fun working with these wonderful people at Steemit, Inc”\n\nWe can broadcast the comment operation with the following body:\n\n  ”@@ -406,12 +406,14 @@”\n  ful\n  -folk\n  +people\n  at\n\n\nThe blockchain will know that this means we have changed the word ‘folk’ to ‘people’ within that paragraph so when fetching this content, this diff will be applied.\n\nIn addition to body, the title and json_metadata fields will also be replaced by the latest operation.\n\nComment_Options: LINK\n\nUpdating_Archived_Content:\n\nContent that is older than 7 days is considered “archived” and cannot be edited unless the author indicates otherwise by broadcasting a custom_json to the witness plugin using their active authority.\n\nAs of HF18, the witness plugin has a custom operation called enable_content_editing that allows a user to signal they want to edit their content. By consensus, content is editable indefinitely, but is soft forked to be frozen after payout. This operation requires an active key and is designed to prevent vandalism if a posting key is compromised.\n\nFor ‘custom_json’: LINK\n\nVote: LINK\n\nIt should also be noted that a vote operation can accompany a comment in the same transaction when the author self_upvotes"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-broadcast-ops": {
							"id": "apidefinitions-broadcast-ops",
							"title": "Broadcast Ops",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsbroadcast-ops",
							"content": "An operation on Steem is a way of expressing intention on the blockchain.\nThey are also known as Broadcast Operations.  They have types, like vote\nor comment.  They pass parameters like author and permlink, depending\non what their purpose is.\n\nOperations are grouped into transactions and passed as parameters to\nmethods like network_broadcast_api.broadcast_transaction_synchronous, in\nthe operations array.  Transactions must be signed in order for the\nblockchain to accept them.  Here is an example of a transaction that\ncontains one operation (shown without signatures).\n\n{\n   \"jsonrpc\":\"2.0\",\n   \"method\":\"network_broadcast_api.broadcast_transaction_synchronous\",\n   \"params\":{\n      \"trx\":{\n         \"ref_block_num\":1097,\n         \"ref_block_prefix\":2181793527,\n         \"expiration\":\"2016-03-24T18:00:21\",\n         \"operations\":[\n            [\n               \"vote\",\n               {\n                  \"voter\":\"steemit\",\n                  \"author\":\"alice\",\n                  \"permlink\":\"a-post-by-alice\",\n                  \"weight\":10000\n               }\n            ]\n         ],\n         \"extensions\":[],\n         \"signatures\":[]\n      }\n   },\n   \"id\":1\n}\n\n\n\nAlso see: Network Broadcast API\n\n\n\n\n\n\n\n\nvote\n\n\n\nThis operation is used to cast a vote on a post/comment.  The primary\npurpose of voting is to express Proof-of-Brain about content to the\nblockchain.  When a vote is cast, the content is considered in the\nconsensus rules involving author and curation rewards.\n\nAn upvote can be cast from the point in time that the content is created\nup to 6.5 days.  The remaining 12 hours are locked out of upvotes at\nwhich time only downvotes may be cast.\n\nA secondary aspect to voting involves reputation, which is not part of\nconsensus.\n\nReputation Rules:\n\n  Must have non-negative reputation to effect another user’s reputation.\n  If you are down voting another user, you must have more reputation than them to impact their reputation.\n\n\nNotes:\n\n  voter: must be a valid account name\n  author: must be a valid account name\n  permlink: must be content created by author\n  weight: absolute value must not be more than 10000 (100.00 %).\n\n\nRoles: posting active owner\nParameters: voter author permlink weight\n\nExample Op:\n\n[\n  \"vote\",\n  {\n    \"voter\": \"steemit\",\n    \"author\": \"alice\",\n    \"permlink\": \"a-post-by-alice\",\n    \"weight\": 10000\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\ncomment\n\n\n\nCreates a post/comment.\n\nNotes:\n\n  title: must not be larger than 256 bytes\n  title: must be UTF-8\n  body: must be larger than 0 bytes\n  body: must be UTF-8\n\n\nRoles: posting active owner\nParameters: parent_author parent_permlink author permlink title body json_metadata\n\nExample Op:\n\n[\n  \"comment\",\n  {\n    \"parent_author\": \"\",\n    \"parent_permlink\": \"steem\",\n    \"author\": \"alice\",\n    \"permlink\": \"a-post-by-alice\",\n    \"title\": \"A Post By Alice\",\n    \"body\": \"This is my post.\",\n    \"json_metadata\": \"{\\\"tags\\\":[\\\"steemit\\\",\\\"example\\\",\\\"tags\\\"]}\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\ntransfer\n\n\n\nTransfers asset from one account to another.  The memo is plain-text,\nany encryption on the memo is up to a higher level protocol.\n\nNotes:\n\n  Transferring of Steem Power (VESTS) is not allowed.\n  Cannot transfer a negative amount (aka: stealing).\n  Memo must be less than 2048 bytes.\n  Memo must be UTF-8.\n\n\nRoles: active owner\nParameters: from to amount memo\n\nExample Op:\n\n[\n  \"transfer\",\n  {\n    \"from\": \"steemit\",\n    \"to\": \"alice\",\n    \"amount\": {\n      \"amount\": \"10\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    },\n    \"memo\": \"Thanks for all the fish.\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\ntransfer_to_vesting\n\n\n\nThis operation converts STEEM into VFS (Vesting Fund Shares) at the\ncurrent exchange rate. With this operation it is possible to give\nanother account vesting shares so that faucets can pre-fund new accounts\nwith vesting shares.\n\nNotes:\n\n  Amount must be in STEEM.\n  Must transfer a nonzero amount.\n\n\nRoles: active owner\nParameters: from to amount\n\nExample Op:\n\n[\n  \"transfer_to_vesting\",\n  {\n    \"from\": \"alice\",\n    \"to\": \"\",\n    \"amount\": {\n      \"amount\": \"357000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    }\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\nwithdraw_vesting\n\n\n\nAt any given point in time an account can be withdrawing from their\nvesting shares. A user may change the number of shares they wish to\ncash out at any time between 0 and their total vesting stake.\n\nAfter applying this operation, vesting_shares will be withdrawn\nat a rate of vesting_shares/13 per week for 13 weeks starting\none week after this operation is included in the blockchain.\n\nThis operation is not valid if the user has no vesting shares.\n\nNotes:\n\n  Amount must be VESTS.\n\n\nRoles: active owner\nParameters: account vesting_shares\n\nExample Op:\n\n[\n  \"withdraw_vesting\",\n  {\n    \"account\": \"steemit\",\n    \"vesting_shares\": {\n      \"amount\": \"200000000000\",\n      \"precision\": 6,\n      \"nai\": \"@@000000037\"\n    }\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\nlimit_order_create\n\n\n\nThis operation creates a limit order and matches it against existing\nopen orders.\n\nRoles: active owner\nParameters: owner orderid amount_to_sell min_to_receive fill_or_kill expiration\n\nExample Op:\n\n[\n  \"limit_order_create\",\n  {\n    \"owner\": \"steemit\",\n    \"orderid\": 10,\n    \"amount_to_sell\": {\n      \"amount\": \"9950\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    },\n    \"min_to_receive\": {\n      \"amount\": \"3500\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"fill_or_kill\": false,\n    \"expiration\": \"2035-10-29T06:32:22\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\nlimit_order_cancel\n\n\n\nCancels an order and returns the balance to owner.\n\nRoles: active owner\nParameters: owner orderid\n\nExample Op:\n\n[\n  \"limit_order_cancel\",\n  {\"owner\": \"steemit\", \"orderid\": 10}\n]\n\n\n\n\n\n\n\n\n\n\n\n\nprice\n\n\n\n\nRoles: active owner\nParameters: base quote\n\n\n\n\n\n\n\n\n\n\nfeed_publish\n\n\n\nFeeds can only be published by the top N witnesses which are included in\nevery round and are used to define the exchange rate between steem and\nthe dollar.\n\nRoles: active owner\nParameters: publisher exchange_rate\n\nExample Op:\n\n[\n  \"feed_publish\",\n  {\n    \"publisher\": \"alice\",\n    \"exchange_rate\": {\n      \"base\": {\n        \"amount\": \"1000\",\n        \"precision\": 3,\n        \"nai\": \"@@000000013\"\n      },\n      \"quote\": {\n        \"amount\": \"1000000\",\n        \"precision\": 3,\n        \"nai\": \"@@000000021\"\n      }\n    }\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\nconvert\n\n\n\nThis operation instructs the blockchain to start a conversion between\nSTEEM and SBD, the funds are deposited after 3.5 days.\n\nRoles: active owner\nParameters: owner requestid amount\n\nExample Op:\n\n[\n  \"convert\",\n  {\n    \"owner\": \"steemit\",\n    \"requestid\": 1467592156,\n    \"amount\": {\n      \"amount\": \"5000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    }\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\naccount_create\n\n\n\n\nRoles: active owner\nParameters: fee creator new_account_name owner active posting memo_key json_metadata\n\nExample Op:\n\n[\n  \"account_create\",\n  {\n    \"fee\": {\n      \"amount\": \"0\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    },\n    \"creator\": \"steemit\",\n    \"new_account_name\": \"alice\",\n    \"owner\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM5b4i9gBqvh4sbgrooXPu2dbGLewNPZkXeuNeBjyiswnu2szgXx\",\n          1\n        ]\n      ]\n    },\n    \"active\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM7ko5nzqaYfjbD4tKWGmiy3xtT9eQFZ3Pcmq5JmygTRptWSiVQy\",\n          1\n        ]\n      ]\n    },\n    \"posting\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM5xAKxnMT2y9VoVJdF63K8xRQAohsiQy9bA33aHeyMB5vgkzaay\",\n          1\n        ]\n      ]\n    },\n    \"memo_key\": \"STM8ZSyzjPm48GmUuMSRufkVYkwYbZzbxeMysAVp7KFQwbTf98TcG\",\n    \"json_metadata\": \"{}\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\naccount_update\n\n\n\n\nRoles: active owner\nParameters: account owner active posting memo_key json_metadata\n\nExample Op:\n\n[\n  \"account_update\",\n  {\n    \"account\": \"steemit\",\n    \"posting\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM6FATHLohxTN8RWWkU9ZZwVywXo6MEDjHHui1jEBYkG2tTdvMYo\",\n          1\n        ],\n        [\n          \"STM76EQNV2RTA6yF9TnBvGSV71mW7eW36MM7XQp24JxdoArTfKA76\",\n          1\n        ]\n      ]\n    },\n    \"memo_key\": \"STM6FATHLohxTN8RWWkU9ZZwVywXo6MEDjHHui1jEBYkG2tTdvMYo\",\n    \"json_metadata\": \"\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\nDisabled\n\n\n\nreport_over_production\n\n\n\nDisabled in HF4\n\nThis operation is used to report a miner who signs two blocks\nat the same time. To be valid, the violation must be reported within\nSTEEM_MAX_WITNESSES blocks of the head block (1 round) and the\nproducer must be in the ACTIVE witness set.\n\nUsers not in the ACTIVE witness set should not have to worry about their\nkey getting compromised and being used to produced multiple blocks so\nthe attacker can report it and steel their vesting steem.\n\nThe result of the operation is to transfer the full VESTING STEEM balance\nof the block producer to the reporter.\n\nRoles: active owner\nParameters: reporter first_block second_block\n\n\n\n\n\n\n\n\n\n\nwitness_update\n\n\n\nUsers who wish to become a witness must pay a fee acceptable to\nthe current witnesses to apply for the position and allow voting\nto begin.\n\nIf the owner isn’t a witness they will become a witness.  Witnesses\nare charged a fee equal to 1 weeks worth of witness pay which in\nturn is derived from the current share supply.  The fee is\nonly applied if the owner is not already a witness.\n\nIf the block_signing_key is null then the witness is removed from\ncontention.  The network will pick the top 21 witnesses for\nproducing blocks.\n\nNotes:\n\n  The fee paid to register a new witness, should be 10x current\nblock production pay.\n  url cannot be more than 2048 bytes.\n  url must be UTF-8.\n  fee cannot be negative.\n\n\nRoles: active owner\nParameters: owner url block_signing_key props fee\n\nExample Op:\n\n[\n  \"witness_update\",\n  {\n    \"owner\": \"alice\",\n    \"url\": \"witness-category/my-witness\",\n    \"block_signing_key\": \"STM8LoQjQqJHvotqBo7HjnqmUbFW9oJ2theyqonzUd9DdJ7YYHsvD\",\n    \"props\": {\n      \"account_creation_fee\": {\n        \"amount\": \"100000\",\n        \"precision\": 3,\n        \"nai\": \"@@000000021\"\n      },\n      \"maximum_block_size\": 131072,\n      \"sbd_interest_rate\": 1000\n    },\n    \"fee\": {\n      \"amount\": \"0\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    }\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\naccount_witness_vote\n\n\n\nAll accounts with a VFS (Vesting Fund Shares) can vote for or against\nany witness.\n\nIf a proxy is specified then all existing votes are removed.\n\nRoles: active owner\nParameters: account witness approve\n\nExample Op:\n\n[\n  \"account_witness_vote\",\n  {\n    \"account\": \"alice\",\n    \"witness\": \"bob\",\n    \"approve\": true\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\naccount_witness_proxy\n\n\n\n\nRoles: active owner\nParameters: account proxy\n\nExample Op:\n\n[\n  \"account_witness_proxy\",\n  {\"account\": \"alice\", \"proxy\": \"bob\"}\n]\n\n\n\n\n\n\n\n\n\n\nDisabled\n\n\n\npow\n\n\n\nDisabled in HF14.\n\nRoles: active owner\nParameters: worker input signature work\n\nExample Op:\n\n[\n  \"pow\",\n  {\n    \"worker_account\": \"admin\",\n    \"block_id\": \"000004433bd4602cf5f74dbb564183837df9cef8\",\n    \"nonce\": 82,\n    \"work\": {\n      \"worker\": \"STM65wH1LZ7BfSHcK69SShnqCAH5xdoSZpGkUjmzHJ5GCuxEK9V5G\",\n      \"input\": \"59b009f89477919f95914151cef06f28bf344dd6fb7670aca1c1f4323c80446b\",\n      \"signature\": \"1f3f83209097efcd01b7d6f27ce726164323d503d6fcf4d55bfb7cb3032796f6766738b36062b5850d69447fdf9c091cbc70825df5eeacc4710a0b11ffdbf0912a\",\n      \"work\": \"0b62f4837801cd857f01d6a541faeb13d6bb95f1c36c6b4b14a47df632aa6c92\"\n    },\n    \"props\": {\n      \"account_creation_fee\": {\n        \"amount\": \"100000\",\n        \"precision\": 3,\n        \"nai\": \"@@000000021\"\n      },\n      \"maximum_block_size\": 131072,\n      \"sbd_interest_rate\": 1000\n    }\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\ncustom\n\n\n\nProvides a generic way to add higher level protocols on top of witness\nconsensus.\n\nThere is no validation for this operation other than that required auths\nare valid.\n\nRoles: active owner\nParameters: required_auths id data\n\nExample Op:\n\n[\n  \"custom\",\n  {\n    \"required_auths\": [\"bytemaster\"],\n    \"id\": 777,\n    \"data\": \"0a627974656d617374657207737465656d697402a3d13897d82114466ad87a74b73a53292d8331d1bd1d3082da6bfbcff19ed097029db013797711c88cccca3692407f9ff9b9ce7221aaa2d797f1692be2215d0a5f6d2a8cab6832050078bc5729201e3ea24ea9f7873e6dbdc65a6bd9899053b9acda876dc69f11a13df9ca8b26b6\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\ndelete_comment\n\n\n\n\nRoles: posting active owner\nParameters: author permlink\n\nExample Op:\n\n[\n  \"delete_comment\",\n  {\n    \"author\": \"alice\",\n    \"permlink\": \"a-post-by-alice\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\ncustom_json\n\n\n\nServes the same purpose as custom but also supports required posting\nauthorities. Unlike custom, this operation is designed to be human\nreadable/developer friendly.\n\nfollow\n\nAs of HF9, the follow plugin will track follow/unfollow/ignore events.\n\nreblog\n\nAs of HF14, allows users to share blogs they find with those who follow\nthem. This change implemented entirely outside the blockchain consensus\nwhich means that reblogging does not create a new post, it merely shares\nan existing post with people who follow you.\n\nwitness\n\nAs of HF18, the witness plugin has a custom operation called\nenable_content_editing that allows a user to signal they want to edit\ntheir content. By consensus, content is editable indefinitely, but is\nsoft forked to be frozen after payout. This operation requires an\nactive key and is designed to prevent vandalism if a posting key is\ncompromised. #1017\n\nRoles: posting active owner\nParameters: required_auths required_posting_auths id json\n\nExample Op:\n\n[\n  \"custom_json\",\n  {\n    \"required_auths\": [],\n    \"required_posting_auths\": [\"steemit\"],\n    \"id\": \"follow\",\n    \"json\": \"[\\\"follow\\\",{\\\"follower\\\":\\\"steemit\\\",\\\"following\\\":\\\"alice\\\",\\\"what\\\":[\\\"blog\\\"]}]\"\n  }\n]\n\n\n\n[\n  \"custom_json\",\n  {\n    \"required_auths\": [],\n    \"required_posting_auths\": [\"alice\"],\n    \"id\": \"follow\",\n    \"json\": \"[\\\"follow\\\",{\\\"follower\\\":\\\"alice\\\",\\\"following\\\":\\\"eve\\\",\\\"what\\\":[\\\"ignore\\\"]}]\"\n  }\n]\n\n\n\n[\n  \"custom_json\",\n  {\n    \"required_auths\": [],\n    \"required_posting_auths\": [\"bob\"],\n    \"id\": \"reblog\",\n    \"json\": \"{\\\"account\\\":\\\"bob\\\",\\\"author\\\":\\\"alice\\\",\\\"permlink\\\":\\\"a-post-by-alice\\\"}\"\n  }\n]\n\n\n\n[\n  \"custom_json\",\n  {\n    \"required_auths\": [\"alice\"],\n    \"required_posting_auths\": [],\n    \"id\": \"witness\",\n    \"json\": \"[\\\"enable_content_editing\\\", {\\\"account\\\": \\\"alice\\\", \\\"relock_time\\\": \\\"2100-01-01T12:00:00\\\"}]\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\ncomment_options\n\n\n\nAuthors of posts may not want all of the benefits that come from creating a post. This\noperation allows authors to update properties associated with their post.\n\nTypically, these options will accompany a comment operation in the same transaction.\n\nAs of HF17, content can specify beneficiaries to receive a part of\ntheir author rewards. The beneficiaries are specified in the extension\nfield of the comment_options_operation and is a sorted vector (by\naccount name) of account name, weight pairs. The beneficiaries can only\nbe specified once and must be specified before any votes are cast on the\ncomment. Most apps are already adding a comment_options in the\ntransaction that creates the comment, so this should not be much of a\nchallenge to add to existing apps.\n\nNotes:\n\n\n  The max_accepted_payout may be decreased, but never increased.\n  The percent_steem_dollars may be decreased, but never increased.\n  Part of comment_option validation process, to be called when\nallowed_vote_assets object has been added as comment option extension are:\n    \n      When votable assets are greater than maximum votable assets: “Too much votable assets specified”\n      When the symbol is not allowed in the list for votable assets: “STEEM can not be explicitly specified as one of allowed_vote_assets”\n    \n  \n  max_accepted_payout: SBD value of the maximum payout this post will receive\n  percent_steem_dollars: the percent of Steem Dollars to key, unkept amounts will be received as Steem Power\n  allow_votes: allows/disallows a post to receive votes;\n  allow_curation_rewards: allows/disllows voters to recieve curation rewards. Rewards return to reward fund.\n  beneficiaries\n    \n      Must have at least one (empty beneficiaries not allowed).\n      Cannot have more than 127 (witness currently only allow up to 8).\n      Cannot allocate more than 100% of rewards to one account.\n      Cannot allocate more than 100% of rewards to a comment.\n      Must be specified in sorted order (account ascending; no duplicates).\n    \n  \n\n\nRoles: posting active owner\nParameters: author permlink max_accepted_payout percent_steem_dollars allow_votes allow_curation_rewards extensions\n\nExample Op:\n\n[\n  \"comment_options\",\n  {\n    \"author\": \"alice\",\n    \"permlink\": \"a-post-by-alice\",\n    \"max_accepted_payout\": {\n      \"amount\": \"1000000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"percent_steem_dollars\": 5000,\n    \"allow_votes\": true,\n    \"allow_curation_rewards\": true,\n    \"extensions\": []\n  }\n]\n\n\n\n[\n  \"comment_options\",\n  {\n    \"author\": \"bob\",\n    \"permlink\": \"a-post-with-a-beneficiary\",\n    \"max_accepted_payout\": {\n      \"amount\": \"1000000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"percent_steem_dollars\": 63,\n    \"allow_votes\": true,\n    \"allow_curation_rewards\": true,\n    \"extensions\": [\n      [\n        0,\n        {\n          \"beneficiaries\": [{\"account\": \"charlie\", \"weight\": 1000}]\n        }\n      ]\n    ]\n  }\n]\n\n\n\n[\n  \"comment_options\",\n  {\n    \"author\": \"charlie\",\n    \"permlink\": \"a-post-with-multiple-beneficiaries\",\n    \"max_accepted_payout\": {\n      \"amount\": \"1000000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"percent_steem_dollars\": 62688,\n    \"allow_votes\": true,\n    \"allow_curation_rewards\": true,\n    \"extensions\": [\n      [\n        0,\n        {\n          \"beneficiaries\": [\n            {\"account\": \"david\", \"weight\": 500},\n            {\"account\": \"erin\", \"weight\": 500},\n            {\"account\": \"faythe\", \"weight\": 1000},\n            {\"account\": \"frank\", \"weight\": 500}\n          ]\n        }\n      ]\n    ]\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\nset_withdraw_vesting_route\n\n\n\nAllows an account to setup a vesting withdraw but with the additional\nrequest for the funds to be transferred directly to another account’s\nbalance rather than the withdrawing account. In addition, those funds\ncan be immediately vested again, circumventing the conversion from\nvests to steem and back, guaranteeing they maintain their value.\n\nNotes:\n\n  Percent must be valid steem percent.\n\n\nRoles: active owner\nParameters: from_account to_account percent auto_vest\n\nExample Op:\n\n[\n  \"set_withdraw_vesting_route\",\n  {\n    \"from_account\": \"alice\",\n    \"to_account\": \"bob\",\n    \"percent\": 10000,\n    \"auto_vest\": true\n  }\n]\n\n\n\n\n\n\n\n\n\n\n\n\nlimit_order_create2\n\n\n\nThis operation is identical to limit_order_create except it serializes\nthe price rather than calculating it from other fields.\n\nRoles: active owner\nParameters: owner orderid amount_to_sell exchange_rate fill_or_kill expiration\n\nExample Op:\n\n[\n  \"limit_order_create2\",\n  {\n    \"owner\": \"alice\",\n    \"orderid\": 492991,\n    \"amount_to_sell\": {\n      \"amount\": \"1\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"exchange_rate\": {\n      \"base\": {\n        \"amount\": \"1\",\n        \"precision\": 3,\n        \"nai\": \"@@000000013\"\n      },\n      \"quote\": {\n        \"amount\": \"10\",\n        \"precision\": 3,\n        \"nai\": \"@@000000021\"\n      }\n    },\n    \"fill_or_kill\": false,\n    \"expiration\": \"2017-05-12T23:11:13\"\n  }\n]\n\n\n\n\n\n\n\n\n\n\nDisabled\n\n\n\nchallenge_authority\n\n\n\nDisabled in HF14.\n\nRoles: posting active owner\nParameters: challenger challenged require_owner\n\n\n\n\n\n\n\n\n\n\nprove_authority\n\n\n\n\nRoles: active owner\nParameters: challenged require_owner\n\n\n\n\n\nSince: HF11\n\n\n\n\n\n\nrequest_account_recovery\n\n\n\nAll account recovery requests come from a listed recovery account. This\nis secure based on the assumption that only a trusted account should be\na recovery account. It is the responsibility of the recovery account to\nverify the identity of the account holder of the account to recover by\nwhichever means they have agreed upon. The blockchain assumes identity\nhas been verified when this operation is broadcast.\n\nThis operation creates an account recovery request which the account to\nrecover has 24 hours to respond to before the request expires and is\ninvalidated.\n\nThere can only be one active recovery request per account at any one time.\nPushing this operation for an account to recover when it already has\nan active request will either update the request to a new new owner authority\nand extend the request expiration to 24 hours from the current head block\ntime or it will delete the request. To cancel a request, simply set the\nweight threshold of the new owner authority to 0, making it an open authority.\n\nAdditionally, the new owner authority must be satisfiable. In other words,\nthe sum of the key weights must be greater than or equal to the weight\nthreshold.\n\nThis operation only needs to be signed by the the recovery account.\nThe account to recover confirms its identity to the blockchain in\nthe recover account operation.\n\nNotes:\n\n\n  recovery_account: The recovery account is listed as the recovery account\non the account to recover.\n  account_to_recover: The account to recover. This is likely due to a\ncompromised owner authority.\n  new_owner_authority: The new owner authority the account to recover\nwishes to have. This is secret known by the account to recover and\nwill be confirmed in a recover_account.\n\n\nSee: #169\n\nRoles: active owner\nParameters: recovery_account account_to_recover new_owner_authority extensions\n\nExample Op:\n\n[\n  \"request_account_recovery\",\n  {\n    \"recovery_account\": \"steem\",\n    \"account_to_recover\": \"alice\",\n    \"new_owner_authority\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM6LYxj96zdypHYqgDdD6Nyh2NxerN3P1Mp3ddNm7gci63nfrSuZ\",\n          1\n        ]\n      ]\n    },\n    \"extensions\": []\n  }\n]\n\n\n\n\n\n\n\nSince: HF11\n\n\n\n\n\n\nrecover_account\n\n\n\n\nRoles: owner\nParameters: account_to_recover new_owner_authority recent_owner_authority extensions\n\nExample Op:\n\n[\n  \"recover_account\",\n  {\n    \"account_to_recover\": \"alice\",\n    \"new_owner_authority\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM7j3nhkhHTpXqLEvdx2yEGhQeeorTcxSV6WDL2DZGxwUxYGrHvh\",\n          1\n        ]\n      ]\n    },\n    \"recent_owner_authority\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM78Xth94gNxp8nmByFV2vNAhg9bsSdviJ6fQXUTFikySLK3uTxC\",\n          1\n        ]\n      ]\n    },\n    \"extensions\": []\n  }\n]\n\n\n\n\n\n\n\nSince: HF11\n\n\n\n\n\n\nchange_recovery_account\n\n\n\nEach account lists another account as their recovery account.\nThe recovery account has the ability to create account_recovery_requests\nfor the account to recover. An account can change their recovery account\nat any time with a 30 day delay. This delay is to prevent\nan attacker from changing the recovery account to a malicious account\nduring an attack. These 30 days match the 30 days that an\nowner authority is valid for recovery purposes.\n\nOn account creation the recovery account is set either to the creator of\nthe account (The account that pays the creation fee and is a signer on the transaction)\nor to the empty string if the account was mined. An account with no recovery\nhas the top voted witness as a recovery account, at the time the recover\nrequest is created. Note: This does mean the effective recovery account\nof an account with no listed recovery account can change at any time as\nwitness vote weights. The top voted witness is explicitly the most trusted\nwitness according to stake.\n\nSee: #169\n\nRoles: owner\nParameters: account_to_recover new_recovery_account extensions\n\nExample Op:\n\n[\n  \"change_recovery_account\",\n  {\n    \"account_to_recover\": \"alice\",\n    \"new_recovery_account\": \"bob\",\n    \"extensions\": []\n  }\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\nescrow_transfer\n\n\n\nThe purpose of this operation is to enable someone to send money\ncontingently to another individual. The funds leave the from account\nand go into a temporary balance where they are held until from\nreleases it to to or to refunds it to from.\n\nIn the event of a dispute the agent can divide the funds between the\nto/from account. Disputes can be raised any time before or on the\ndispute deadline time, after the escrow has been approved by all\nparties.\n\nThis operation only creates a proposed escrow transfer. Both the agent\nand to must agree to the terms of the arrangement by approving the\nescrow.\n\nThe escrow agent is paid the fee on approval of all parties. It is up to\nthe escrow agent to determine the fee.\n\nEscrow transactions are uniquely identified by from and escrow_id,\nthe escrow_id is defined by the sender.\n\nSee: steem_operations.hpp:229\n\nRoles: active owner\nParameters: from to agent escrow_id sbd_amount steem_amount fee ratification_deadline escrow_expiration json_meta\n\nExample Op:\n\n[\n  \"escrow_transfer\",\n  {\n    \"from\": \"alice\",\n    \"to\": \"bob\",\n    \"sbd_amount\": {\n      \"amount\": \"1000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"steem_amount\": {\n      \"amount\": \"0\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    },\n    \"escrow_id\": 23456789,\n    \"agent\": \"charlie\",\n    \"fee\": {\n      \"amount\": \"100\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"json_meta\": \"{}\",\n    \"ratification_deadline\": \"2017-02-26T11:22:39\",\n    \"escrow_expiration\": \"2017-02-28T11:22:39\"\n  }\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\nescrow_dispute\n\n\n\nIf either the sender or receiver of an escrow payment has an issue, they\ncan raise it for dispute. Once a payment is in dispute, the agent has\nauthority over who gets what.\n\nSee: steem_operations.hpp:229\n\nRoles: active owner\nParameters: from to agent who escrow_id\n\nExample Op:\n\n[\n  \"escrow_dispute\",\n  {\n    \"from\": \"alice\",\n    \"to\": \"bob\",\n    \"agent\": \"charlie\",\n    \"who\": \"alice\",\n    \"escrow_id\": 72526562\n  }\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\nescrow_release\n\n\n\nThis operation can be used by anyone associated with the escrow transfer\nto release funds if they have permission.\n\nThe permission scheme is as follows:\n\n  If there is no dispute and escrow has not expired, either party can\nrelease funds to the other.\n  If escrow expires and there is no dispute, either party can release\nfunds to either party.\n  If there is a dispute regardless of expiration, the agent can\nrelease funds to either party following whichever agreement was in place between the parties.\n\n\nSee: steem_operations.hpp:229\n\nRoles: active owner\nParameters: from to agent who receiver escrow_id sbd_amount steem_amount\n\nExample Op:\n\n[\n  \"escrow_release\",\n  {\n    \"from\": \"alice\",\n    \"to\": \"bob\",\n    \"agent\": \"charlie\",\n    \"who\": \"charlie\",\n    \"receiver\": \"bob\",\n    \"escrow_id\": 72526562,\n    \"sbd_amount\": {\n      \"amount\": \"5000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"steem_amount\": {\n      \"amount\": \"0\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    }\n  }\n]\n\n\n\n\n\n\n\n\n\n\nDisabled\n\n\n\npow2\n\n\n\nDisabled in HF17.\nRoles: active owner\nParameters: input pow_summary\n\nExample Op:\n\n[\n  \"pow2\",\n  {\n    \"work\": [\n      0,\n      {\n        \"input\": {\n          \"worker_account\": \"alice\",\n          \"prev_block\": \"003ea604345523c344fbadab605073ea712dd76f\",\n          \"nonce\": \"1052853013628665497\"\n        },\n        \"pow_summary\": 3817904373\n      }\n    ],\n    \"props\": {\n      \"account_creation_fee\": {\n        \"amount\": \"1\",\n        \"precision\": 3,\n        \"nai\": \"@@000000021\"\n      },\n      \"maximum_block_size\": 131072,\n      \"sbd_interest_rate\": 1000\n    }\n  }\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\nescrow_approve\n\n\n\nThe agent and to accounts must approve an escrow transaction for it to\nbe valid on the blockchain. Once a party approves the escrow, they\ncannot revoke their approval. Subsequent escrow approve operations,\nregardless of the approval, will be rejected.\n\nSee: steem_operations.hpp:229\n\nRoles: active owner\nParameters: from to agent who escrow_id approve\n\nExample Op:\n\n[\n  \"escrow_approve\",\n  {\n    \"from\": \"alice\",\n    \"to\": \"bob\",\n    \"agent\": \"charlie\",\n    \"who\": \"charlie\",\n    \"escrow_id\": 59102208,\n    \"approve\": true\n  }\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\ntransfer_to_savings\n\n\n\nFor time locked savings accounts. A user can place Steem and Steem\nDollars into time locked savings balances. Funds can be withdrawn from\nthese balances after a three day delay. The point of this addition is to\nmitigate loss from hacked and compromised account. The max a user can\nlose instantaneously is the sum of what the hold in liquid balances.\nAssuming an account can be recovered quickly, loss in such situations\ncan be kept to a minimum.\n\nSee: steem_operations.hpp:868\n\nRoles: active owner\nParameters: from to amount memo\n\nExample Op:\n\n[\n  \"transfer_to_savings\",\n  {\n    \"from\": \"alice\",\n    \"to\": \"alice\",\n    \"amount\": {\n      \"amount\": \"1000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"memo\": \"\"\n  }\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\ntransfer_from_savings\n\n\n\n\nRoles: active owner\nParameters: from request_id to amount memo\n\nExample Op:\n\n[\n  \"transfer_from_savings\",\n  {\n    \"from\": \"alice\",\n    \"request_id\": 101,\n    \"to\": \"alice\",\n    \"amount\": {\n      \"amount\": \"1000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"memo\": \"\"\n  }\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\ncancel_transfer_from_savings\n\n\n\n\nRoles: active owner\nParameters: from request_id\n\nExample Op:\n\n[\n  \"cancel_transfer_from_savings\",\n  {\"from\": \"alice\", \"request_id\": 1}\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\ncustom_binary\n\n\n\nThe semmantics for this operation are the same as the custom_json\noperation, but with a binary payload. The json deserialization has a\nnon-trivial cost associated with it. This operation will allow for\nbinary deserialization of plugin operations and should improve overall\nperformance of plugins that chose to use it.\n\nSee: steem_operations.hpp:491\n\nRoles: posting active owner\nParameters: id data\n\n\n\n\n\nSince: HF14\n\n\n\n\n\n\ndecline_voting_rights\n\n\n\nAn account can chose to decline their voting rights after a 30 day\ndelay. This includes voting on content and witnesses. The voting rights\ncannot be acquired again once they have been declined. This is only to\nformalize a smart contract between certain accounts and the community\nthat currently only exists as a social contract.\n\nSee: steem_operations.hpp:897\n\nRoles: owner\nParameters: account decline\n\nExample Op:\n\n[\n  \"decline_voting_rights\",\n  {\"account\": \"judy\", \"decline\": true}\n]\n\n\n\n\n\n\n\nSince: HF11\n\n\n\n\nDisabled\n\n\n\nreset_account\n\n\n\nThis operation allows recovery_account to change account_to_reset’s\nowner authority to new_owner_authority after 60 days of inactivity.\n\nSee: #169\n\nRoles: active owner\nParameters: reset_account account_to_reset new_owner_authority\n\n\n\n\n\nSince: HF11\n\n\n\n\nDisabled\n\n\n\nset_reset_account\n\n\n\nThis operation allows account owner to control which account has the\npower to execute the reset_account operation after 60 days.\n\nSee: #169\n\nRoles: owner posting\nParameters: account current_reset_account reset_account\n\n\n\n\n\n\n\n\n\n\nclaim_reward_balance\n\n\n\n\nRoles: posting active owner\nParameters: account reward_steem reward_sbd reward_vests\n\nExample Op:\n\n[\n  \"claim_reward_balance\",\n  {\n    \"account\": \"alice\",\n    \"reward_steem\": {\n      \"amount\": \"17\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    },\n    \"reward_sbd\": {\n      \"amount\": \"11\",\n      \"precision\": 3,\n      \"nai\": \"@@000000013\"\n    },\n    \"reward_vests\": {\n      \"amount\": \"185025103\",\n      \"precision\": 6,\n      \"nai\": \"@@000000037\"\n    }\n  }\n]\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\n\n\ndelegate_vesting_shares\n\n\n\nDelegate vesting shares from one account to the other. The vesting\nshares are still owned by the original account, but content voting\nrights and bandwidth allocation are transferred to the receiving\naccount. This sets the delegation to vesting_shares, increasing it or\ndecreasing it as needed (i.e. a delegation of 0 removes the delegation).\n\nWhen a delegation is removed the shares are placed in limbo for a week\nto prevent a satoshi of VESTS from voting on the same content twice.\n\nAlso see:\n\n  steem_evaluator.cpp:2309\n\n\nRoles: active owner\nParameters: delegator delegatee vesting_shares\n\nExample Op:\n\n[\n  \"delegate_vesting_shares\",\n  {\n    \"delegator\": \"alice\",\n    \"delegatee\": \"bob\",\n    \"vesting_shares\": {\n      \"amount\": \"94599167138276\",\n      \"precision\": 6,\n      \"nai\": \"@@000000037\"\n    }\n  }\n]\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\n\n\naccount_create_with_delegation\n\n\n\nInstead of paying the entire account creation fee with Steem, creators\ncan now pay a smaller fee (30x less) and delegate some Steem Power for\n30 days. The exact amount is 5 * min_fee + STEEM_POWER == 150 * min_fee.\nYou can pay any combination of STEEM and Steem Power along that curve\n(so long as the minimum fee is paid).\n\nThe witness voted STEEM fee is now the minimum required STEEM fee for\ndelegation. Witnesses should reduce their fee by 30x when the hardfork\ngoes live to preserve the same required fee for an all STEEM account\ncreation.\n\nAlso see:\n\n  config.hpp:145\n  steem_evaluator.cpp:400\n\n\nRoles: active owner\nParameters: fee delegation creator new_account_name owner active posting memo_key json_metadata extensions\n\nExample Op:\n\n[\n  \"account_create_with_delegation\",\n  {\n    \"fee\": {\n      \"amount\": \"3000\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    },\n    \"delegation\": {\n      \"amount\": \"0\",\n      \"precision\": 6,\n      \"nai\": \"@@000000037\"\n    },\n    \"creator\": \"steemit\",\n    \"new_account_name\": \"alice\",\n    \"owner\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM5Tki3ecCdCCHCjhhwvQvXuKryL2s34Ma6CXsRzntSUTYVYxCQ9\",\n          1\n        ]\n      ]\n    },\n    \"active\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM6LUoAA8gCL9tHRz7v9xcwR4ZWD3KDRHP5t1U7UAZHdfanLxyBE\",\n          1\n        ]\n      ]\n    },\n    \"posting\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM8anmpHdfVE4AmwsDpcSXpRsydHysEbv6vGJkRQy1d1CC83zeTA\",\n          1\n        ]\n      ]\n    },\n    \"memo_key\": \"STM67RYDyEkP1Ja1jFehJ45BFGA9oHHUnRnYbxKJEtMhVQiHW3S3k\",\n    \"json_metadata\": \"{}\",\n    \"extensions\": []\n  }\n]\n\n\n\n\n\n\n\n\nVirtual Operation\n\n\n\n\n\nfill_convert_request\n\n\n\nFills when conversion requests with a conversion date before the head\nblock time and then converts them to/from steem/sbd at the current\nmedian price feed history price times the premium.\n\nRoles: active owner\nParameters: owner requestid amount_in amount_out\n\n\n\n\n\n\nVirtual Operation\n\n\n\n\n\nauthor_reward\n\n\n\n\nRoles: posting active owner\nParameters: author permlink sbd_payout steem_payout vesting_payout\n\n\n\n\n\n\nVirtual Operation\n\n\n\n\n\ncuration_reward\n\n\n\n\nRoles: posting active owner\nParameters: curator reward comment_author comment_permlink\n\n\n\n\n\nSince: HF17\n\n\nVirtual Operation\n\n\n\n\n\ncomment_reward\n\n\n\nSee: #774\n\nRoles: posting active owner\nParameters: author permlink payout\n\n\n\n\n\n\nVirtual Operation\n\n\n\nDisabled\n\n\n\nliquidity_reward\n\n\n\nDeprecated as of HF12, see: #178.\n\nRoles: active owner\nParameters: owner payout\n\n\n\n\n\n\nVirtual Operation\n\n\n\n\n\ninterest\n\n\n\n\nRoles: active owner\nParameters: owner interest\n\nExample Op:\n\n[\n  \"interest\",\n  {\"owner\": \"alice\", \"interest\": \"0.001 SBD\"}\n]\n\n\n\n\n\n\n\nSince: HF6\n\n\nVirtual Operation\n\n\n\n\n\nfill_vesting_withdraw\n\n\n\nSee: #78\n\nRoles: active owner\nParameters: from_account to_account withdrawn deposited\n\nExample Op:\n\n[\n  \"fill_vesting_withdraw\",\n  {\n    \"from_account\": \"alice\",\n    \"to_account\": \"alice\",\n    \"withdrawn\": \"0.026475 VESTS\",\n    \"deposited\": \"0.710 STEEM\"\n  }\n]\n\n\n\n\n\n\n\n\nVirtual Operation\n\n\n\n\n\nfill_order\n\n\n\n\nRoles: posting active owner\nParameters: current_owner current_orderid current_pays open_owner open_orderid open_pays\n\nExample Op:\n\n[\n  \"fill_order\",\n  {\n    \"current_owner\": \"alice\",\n    \"current_orderid\": 42896,\n    \"current_pays\": \"94.999 SBD\",\n    \"open_owner\": \"bob\",\n    \"open_orderid\": 10001,\n    \"open_pays\": \"500.000 STEEM\"\n  }\n]\n\n\n\n\n\n\n\nSince: HF14\n\n\nVirtual Operation\n\n\n\n\n\nshutdown_witness\n\n\n\nWhen a witness goes offline.\n\nSee: #278\n\nRoles: posting active owner\nParameters: owner\n\nExample Op:\n\n[\"shutdown_witness\", {\"owner\": \"alice\"}]\n\n\n\n\n\n\n\nSince: HF14\n\n\nVirtual Operation\n\n\n\n\n\nfill_transfer_from_savings\n\n\n\n\nRoles: posting active owner\nParameters: from to amount request_id memo\n\n\n\n\n\nSince: HF9\n\n\nVirtual Operation\n\n\n\n\n\nhardfork\n\n\n\n\nRoles: posting active owner\nParameters: hardfork_id\n\n\n\n\n\n\nVirtual Operation\n\n\n\n\n\ncomment_payout_update\n\n\n\n\nRoles: posting active owner\nParameters: author permlink\n\n\n\n\n\nSince: HF17\n\n\nVirtual Operation\n\n\n\n\n\nreturn_vesting_delegation\n\n\n\n\nRoles: posting active owner\nParameters: account vesting_shares\n\n\n\n\n\nSince: HF17\n\n\nVirtual Operation\n\n\n\n\n\ncomment_benefactor_reward\n\n\n\n\nRoles: posting active owner\nParameters: benefactor author permlink reward\n\n\n\n\n\nSince: HF17\n\n\nVirtual Operation\n\n\n\n\n\nproducer_reward\n\n\n\nWitness rewards for block signing are hard to account for. Making these\nrewards visible will help witnesses and prospective witnesses by\nproviding them with more complete and accurate information to guide\ntheir decisions to invest in the platform.\n\nRoles: posting active owner\nParameters: producer vesting_shares\n\nExample Op:\n\n[\n  \"producer_reward\",\n  {\n    \"producer\": \"alice\",\n    \"vesting_shares\": \"14403.626449 VESTS\"\n  }\n]"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-condenser-api": {
							"id": "apidefinitions-condenser-api",
							"title": "Condenser Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionscondenser-api",
							"content": "To help with this transition, we created condenser_api, which contains all of the API methods that currently exist and uses the existing argument formatting. The easiest way to get your app to work with Appbase is to change the api to condenser_api.\n\nAll calls in condenser_api will return [] as the argument, as the array argument passing is opaque and implemented in the API calls themselves. They follow the current argument formatting. Existing apps should only need to skip using login_api and send all of their calls to condenser_api without any other changes required to use Appbase.\n\nFor example, calling get_dynamic_global_properties with condenser_api vs database_api:\n\n{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_dynamic_global_properties\", \"params\":[], \"id\":1}\n\n\n\n{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_dynamic_global_properties\", \"id\":1}\n\n\n\nBecause the method has no arguments, the params field can be omitted when not using condenser_api. However, it can optionally be included as the void type (e.g. \"params\":{}) but it is not required.\n\n\n\n\n\n\ncondenser_api.broadcast_block \nUsed to broadcast a block.\nQuery Parameters JSON \n[\n  {\n    \"previous\": \"0000000000000000000000000000000000000000\",\n    \"timestamp\": \"1970-01-01T00:00:00\",\n    \"witness\": \"\",\n    \"transaction_merkle_root\": \"0000000000000000000000000000000000000000\",\n    \"extensions\": [],\n    \"witness_signature\": \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"transactions\": []\n  }\n]\n\n\nExpected Response JSON \n{}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.broadcast_block\", \"params\":[{\"previous\":\"0000000000000000000000000000000000000000\",\"timestamp\":\"1970-01-01T00:00:00\",\"witness\":\"\",\"transaction_merkle_root\":\"0000000000000000000000000000000000000000\",\"extensions\":[],\"witness_signature\":\"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"transactions\":[]}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.broadcast_transaction \nUsed to broadcast a transaction.\nQuery Parameters JSON \n[\n  {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  }\n]\n\n\nExpected Response JSON \n{}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.broadcast_transaction\", \"params\":[{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[[\"vote\",{\"voter\":\"steemit\",\"author\":\"alice\",\"permlink\":\"a-post-by-alice\",\"weight\":10000}]],\"extensions\":[],\"signatures\":[]}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.broadcast_transaction\", \"params\":[{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[[\"pow\",{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":\"100.000 STEEM\",\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}]],\"extensions\":[],\"signatures\":[]}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.broadcast_transaction_synchronous \nUsed to broadcast a transaction and waits for it to be processed synchronously.\nQuery Parameters JSON \n[\n  {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  }\n]\n\n\nExpected Response JSON \n{\n  \"id\": \"0000000000000000000000000000000000000000\",\n  \"block_num\": 0,\n  \"trx_num\": 0,\n  \"expired\": false\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.broadcast_transaction_synchronous\", \"params\":[{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[[\"vote\",{\"voter\":\"steemit\",\"author\":\"alice\",\"permlink\":\"a-post-by-alice\",\"weight\":10000}]],\"extensions\":[],\"signatures\":[]}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.broadcast_transaction_synchronous\", \"params\":[{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[[\"pow\",{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":\"100.000 STEEM\",\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}]],\"extensions\":[],\"signatures\":[]}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_account_bandwidth \nReturns the available bandwidth of an account.  Parameters: account:string; type:string, e.g.: forum or market\n\n\n  \n    \n      account (string)\n      type (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      \"forum\"\n      Query the available forum bandwidth for the account named “steemit”.\n    \n    \n      \"alice\"\n      \"market\"\n      Query the available market bandwidth for the account named “alice”.\n    \n  \n\n\nSee: Forum/Market Bandwidth\n\nQuery Parameters JSON \n[\"steemit\", \"forum\"]\n\n\nExpected Response JSON \n{\n  \"id\": 8,\n  \"account\": \"steemit\",\n  \"type\": \"forum\",\n  \"average_bandwidth\": 214996934,\n  \"lifetime_bandwidth\": \"48395000000\",\n  \"last_bandwidth_update\": \"2018-02-16T03:11:00\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_bandwidth\", \"params\":[\"steemit\",\"forum\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_bandwidth\", \"params\":[\"alice\",\"market\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_account_count \nReturns the number of accounts.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n0\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_count\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_account_history \nReturns a history of all operations for a given account.  Parameters: account:string; start:int. e.g.: -1 for reverse history or any positive numeric; limit:int up to 10000\n\n\n  \n    \n      account (string)\n      start (int)\n      limit (int)\n       \n    \n  \n  \n    \n      \"steemit\"\n      1000\n      1000\n      Queries the account named steemit starting on the latest item in history, up to 1,000 results.\n    \n    \n      \"alice\"\n      -1\n      10000\n      Queries the account named alice starting on the oldest item in history, up to 10,000 results.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", 0, 1000]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_history\", \"params\":[\"steemit\", 1000, 1000], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_history\", \"params\":[\"steemit\", -1, 10000], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF13\n\n\n\n\ncondenser_api.get_account_reputations \nReturns a list of account reputations.  Parameters: account_lower_bound:string; limit:int up to 1000\n\n\n  \n    \n      account_lower_bound (string)\n      limit (int)\n       \n    \n  \n  \n    \n      \"steemit\"\n      1\n      Queries for accounts that start with “steemit”, only one result.\n    \n    \n      \"a\"\n      10\n      Queries for accounts that start with “a”, up to 10 results.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", 1000]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_reputations\", \"params\":[\"steemit\", 1], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_reputations\", \"params\":[\"a\", 10], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_account_votes \nReturns all votes by an account.  Parameters: account:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries for votes by “steemit”.\n    \n    \n      \"alice\"\n      Queries for votes by “alice”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n[\n  {\n    \"authorperm\": \"\",\n    \"weight\": \"\",\n    \"rshares\": \"\",\n    \"percent\": null,\n    \"time\": \"2016-04-29T22:27:42\"\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_votes\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_account_votes\", \"params\":[\"alice\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_accounts \nReturns accounts, queried by name.  Parameters: account:string array\n\n\n  \n    \n      account (string array)\n       \n    \n  \n  \n    \n      [\"steemit\"]\n      Queries for account named “steemit”.\n    \n    \n      [\"steemit\", \"alice\"]\n      Queries for accounts named “steemit” and “alice”.\n    \n  \n\n\nQuery Parameters JSON \n[[\"\"]]\n\n\nExpected Response JSON \n[\n  {\n    \"id\": 0,\n    \"name\": \"\",\n    \"owner\": {\n      \"weight_threshold\": 0,\n      \"account_auths\": [],\n      \"key_auths\": [[\"\", 0], [\"\", 0], [\"\", 0]]\n    },\n    \"active\": {\n      \"weight_threshold\": 0,\n      \"account_auths\": [],\n      \"key_auths\": [[\"\", 0], [\"\", 0]]\n    },\n    \"posting\": {\n      \"weight_threshold\": 0,\n      \"account_auths\": [],\n      \"key_auths\": [[\"\", 0], [\"\", 0], [\"\", 0]]\n    },\n    \"memo_key\": \"\",\n    \"json_metadata\": \"\",\n    \"proxy\": \"\",\n    \"last_owner_update\": \"2017-03-16T21:17:51\",\n    \"last_account_update\": \"2017-03-16T23:10:36\",\n    \"created\": \"2016-03-24T17:00:21\",\n    \"mined\": false,\n    \"recovery_account\": \"\",\n    \"last_account_recovery\": \"1970-01-01T00:00:00\",\n    \"reset_account\": \"null\",\n    \"comment_count\": 0,\n    \"lifetime_vote_count\": 0,\n    \"post_count\": 0,\n    \"can_vote\": false,\n    \"voting_power\": 0,\n    \"last_vote_time\": \"2016-12-04T23:10:57\",\n    \"balance\": \"0.000 STEEM\",\n    \"savings_balance\": \"0.0 STEEM\",\n    \"sbd_balance\": \"0.0 SBD\",\n    \"sbd_seconds\": \"\",\n    \"sbd_seconds_last_update\": \"2018-04-10T04:08:36\",\n    \"sbd_last_interest_payment\": \"2018-03-15T17:58:24\",\n    \"savings_sbd_balance\": \"0.000 SBD\",\n    \"savings_sbd_seconds\": \"\",\n    \"savings_sbd_seconds_last_update\": \"1970-01-01T00:00:00\",\n    \"savings_sbd_last_interest_payment\": \"1970-01-01T00:00:00\",\n    \"savings_withdraw_requests\": 0,\n    \"reward_sbd_balance\": \"0.000 SBD\",\n    \"reward_steem_balance\": \"0.000 STEEM\",\n    \"reward_vesting_balance\": \"0.000000 VESTS\",\n    \"reward_vesting_steem\": \"0.000 STEEM\",\n    \"vesting_shares\": \"0.000 VESTS\",\n    \"delegated_vesting_shares\": \"0.000000 VESTS\",\n    \"received_vesting_shares\": \"0.000000 VESTS\",\n    \"vesting_withdraw_rate\": \"0.000000 VESTS\",\n    \"next_vesting_withdrawal\": \"1969-12-31T23:59:59\",\n    \"withdrawn\": 0,\n    \"to_withdraw\": 0,\n    \"withdraw_routes\": 0,\n    \"curation_rewards\": 0,\n    \"posting_rewards\": 0,\n    \"proxied_vsf_votes\": [0, 0, 0, 0],\n    \"witnesses_voted_for\": 0,\n    \"last_post\": \"2016-03-30T18:30:18\",\n    \"last_root_post\": \"2016-03-30T18:30:18\",\n    \"average_bandwidth\": 0,\n    \"lifetime_bandwidth\": \"\",\n    \"last_bandwidth_update\": \"2018-02-16T03:11:00\",\n    \"average_market_bandwidth\": 0,\n    \"lifetime_market_bandwidth\": \"\",\n    \"last_market_bandwidth_update\": \"2018-02-01T19:12:24\",\n    \"vesting_balance\": \"0.000 STEEM\",\n    \"reputation\": \"\",\n    \"transfer_history\": [],\n    \"market_history\": [],\n    \"post_history\": [],\n    \"vote_history\": [],\n    \"other_history\": [],\n    \"witness_votes\": [],\n    \"tags_usage\": [],\n    \"guest_bloggers\": []\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_accounts\", \"params\":[[\"steemit\"]], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_accounts\", \"params\":[[\"steemit\", \"alice\"]], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_active_votes \nReturns all votes for the given post.  Parameters: author:string; permlink:string\n\n\n  \n    \n      author (string)\n      permlink (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      \"firstpost\"\n      Queries votes for content with a slug @steemit/firstpost\n    \n    \n      \"alice\"\n      \"a-post-by-alice\"\n      Queries votes for content with a slug @alice/a-post-by-alice\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"\"]\n\n\nExpected Response JSON \n[\n  {\n    \"voter\": \"\",\n    \"weight\": \"\",\n    \"rshares\": 0,\n    \"percent\": 0,\n    \"reputation\": \"\",\n    \"time\": \"1970-01-01T00:00:00\"\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_active_votes\", \"params\":[\"steemit\", \"firstpost\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_active_votes\", \"params\":[\"alice\", \"a-post-by-alice\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_active_witnesses \nReturns the list of active witnesses.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_active_witnesses\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_block \nReturns a block.  Parameters: block_num:int\n\n\n  \n    \n      block_num (int)\n       \n    \n  \n  \n    \n      1\n      Queries the very first block.\n    \n    \n      8675309\n      Queries block number 8,675,309.\n    \n    \n      62396745\n      Queries block number 62,396,745.\n    \n  \n\n\nQuery Parameters JSON \n[1]\n\n\nExpected Response JSON \n{\n  \"previous\": \"0000000000000000000000000000000000000000\",\n  \"timestamp\": \"2016-03-24T16:05:00\",\n  \"witness\": \"initminer\",\n  \"transaction_merkle_root\": \"0000000000000000000000000000000000000000\",\n  \"extensions\": [],\n  \"witness_signature\": \"204f8ad56a8f5cf722a02b035a61b500aa59b9519b2c33c77a80c0a714680a5a5a7a340d909d19996613c5e4ae92146b9add8a7a663eef37d837ef881477313043\",\n  \"transactions\": [],\n  \"block_id\": \"0000000109833ce528d5bbfb3f6225b39ee10086\",\n  \"signing_key\": \"STM8GC13uCZbP44HzMLV6zPZGwVQ8Nt4Kji8PapsPiNq1BK153XTX\",\n  \"transaction_ids\": []\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[1], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[8675309], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[62396745], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_block_header \nReturns a block header.  Parameters: block_num:int\n\n\n  \n    \n      block_num (int)\n       \n    \n  \n  \n    \n      1\n      Queries the block headers for the very first block.\n    \n    \n      8675309\n      Queries block headers for block number 8,675,309.\n    \n    \n      62396745\n      Queries block headers for block number 62,396,745.\n    \n  \n\n\nQuery Parameters JSON \n[1]\n\n\nExpected Response JSON \n{\n  \"previous\": \"0000000000000000000000000000000000000000\",\n  \"timestamp\": \"2016-03-24T16:05:00\",\n  \"witness\": \"initminer\",\n  \"transaction_merkle_root\": \"0000000000000000000000000000000000000000\",\n  \"extensions\": []\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block_header\", \"params\":[1], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block_header\", \"params\":[8675309], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block_header\", \"params\":[62396745], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_blog \nReturns the list of blog entries for an account.  Parameters: account:string; start_entry_id:int; limit:int up to 500\n\n\n  \n    \n      account (string)\n      start_entry_id (int)\n      limit (int)\n       \n    \n  \n  \n    \n      “steemit”\n      0\n      1\n      Queries the blog for the account named “steemit”, up to one result.\n    \n    \n      “alice”\n      0\n      50\n      Queries the blog for the account named “alice”, up to 50 results.\n    \n  \n\n\nQuery Parameters JSON \n[\"steemit\", 0, 1]\n\n\nExpected Response JSON \n[\n  {\n    \"comment\": {\n      \"id\": 0,\n      \"author\": \"steemit\",\n      \"permlink\": \"firstpost\",\n      \"category\": \"meta\",\n      \"parent_author\": \"\",\n      \"parent_permlink\": \"meta\",\n      \"title\": \"Welcome to Steem!\",\n      \"body\": \"Steemit is a social media platform where anyone can earn STEEM points by posting. The more people who like a post, the more STEEM the poster earns. Anyone can sell their STEEM for cash or vest it to boost their voting power.\",\n      \"json_metadata\": \"\",\n      \"last_update\": \"2016-03-30T18:30:18\",\n      \"created\": \"2016-03-30T18:30:18\",\n      \"active\": \"2018-04-09T12:00:42\",\n      \"last_payout\": \"2016-08-24T19:59:42\",\n      \"depth\": 0,\n      \"children\": 336,\n      \"net_rshares\": 0,\n      \"abs_rshares\": 0,\n      \"vote_rshares\": 0,\n      \"children_abs_rshares\": \"26169324897669\",\n      \"cashout_time\": \"1969-12-31T23:59:59\",\n      \"max_cashout_time\": \"1969-12-31T23:59:59\",\n      \"total_vote_weight\": 0,\n      \"reward_weight\": 10000,\n      \"total_payout_value\": {\n        \"amount\": \"942\",\n        \"precision\": 3,\n        \"nai\": \"@@000000013\"\n      },\n      \"curator_payout_value\": {\n        \"amount\": \"756\",\n        \"precision\": 3,\n        \"nai\": \"@@000000013\"\n      },\n      \"author_rewards\": 3548,\n      \"net_votes\": 90,\n      \"root_author\": \"steemit\",\n      \"root_permlink\": \"firstpost\",\n      \"max_accepted_payout\": {\n        \"amount\": \"1000000000\",\n        \"pecision\": 3,\n        \"nai\": \"@@000000013\"\n      },\n      \"percent_steem_dollars\": 10000,\n      \"allow_replies\": true,\n      \"allow_votes\": true,\n      \"allow_curation_rewards\": true,\n      \"beneficiaries\": []\n    },\n    \"blog\": \"steemit\",\n    \"reblog_on\": \"1970-01-01T00:00:00\",\n    \"entry_id\": 0\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_blog\", \"params\":[\"steemit\",0,1], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_blog\", \"params\":[\"alice\",0,50], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_blog_authors \nReturns a list of authors that have had their content reblogged on a given blog account.  Parameters: account:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries for account named “steemit”.\n    \n    \n      \"alice\"\n      Queries for accounts named alice”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n[{\"author\": \"\", \"count\": 0}]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_blog_authors\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_blog_authors\", \"params\":[\"alice\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_blog_entries \nReturns a list of blog entries for an account.  Parameters: account:string; start_entry_id:int; limit:int up to 500\n\n\n  \n    \n      account (string)\n      start_entry_id (int)\n      limit (int)\n       \n    \n  \n  \n    \n      “steemit”\n      0\n      1\n      Queries the blog entries for the account named “steemit”, up to one result.\n    \n    \n      “alice”\n      0\n      50\n      Queries the blog entries for the account named “alice”, up to 50 results.\n    \n  \n\n\nQuery Parameters JSON \n[\"steemit\", 0, 1]\n\n\nExpected Response JSON \n[\n  {\n    \"author\": \"steemit\",\n    \"permlink\": \"firstpost\",\n    \"blog\": \"steemit\",\n    \"reblog_on\": \"1970-01-01T00:00:00\",\n    \"entry_id\": 0\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_blog_entries\", \"params\":[\"steemit\",0,1], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_blog_entries\", \"params\":[\"alice\",0,50], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_chain_properties \nReturns the chain properties.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\n  \"account_creation_fee\": \"0.100 STEEM\",\n  \"maximum_block_size\": 131072,\n  \"sbd_interest_rate\": 1000,\n  \"account_subsidy_limit\": 0\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_chain_properties\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ncondenser_api.get_comment_discussions_by_payout \nReturns a list of discussions based on payout.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_comment_discussions_by_payout\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_comment_discussions_by_payout\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_config \nReturns information about compile-time constants.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_config\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_content \nReturns the content (post or comment).  Parameters: author:string; permlink:string\n\n\n  \n    \n      author (string)\n      permlink (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      \"firstpost\"\n      Queries content with a slug @steemit/firstpost\n    \n    \n      \"alice\"\n      \"a-post-by-alice\"\n      Queries content with a slug @alice/a-post-by-alice\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"\"]\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"author\": \"\",\n  \"permlink\": \"\",\n  \"category\": \"\",\n  \"parent_author\": \"\",\n  \"parent_permlink\": \"\",\n  \"title\": \"\",\n  \"body\": \"\",\n  \"json_metadata\": \"\",\n  \"last_update\": \"1970-01-01T00:00:00\",\n  \"created\": \"1970-01-01T00:00:00\",\n  \"active\": \"1970-01-01T00:00:00\",\n  \"last_payout\": \"1970-01-01T00:00:00\",\n  \"depth\": 0,\n  \"children\": 0,\n  \"net_rshares\": 0,\n  \"abs_rshares\": 0,\n  \"vote_rshares\": 0,\n  \"children_abs_rshares\": 0,\n  \"cashout_time\": \"1970-01-01T00:00:00\",\n  \"max_cashout_time\": \"1970-01-01T00:00:00\",\n  \"total_vote_weight\": 0,\n  \"reward_weight\": 0,\n  \"total_payout_value\": \"0.000 STEEM\",\n  \"curator_payout_value\": \"0.000 STEEM\",\n  \"author_rewards\": 0,\n  \"net_votes\": 0,\n  \"root_author\": \"\",\n  \"root_permlink\": \"\",\n  \"max_accepted_payout\": \"0.000 STEEM\",\n  \"percent_steem_dollars\": 0,\n  \"allow_replies\": false,\n  \"allow_votes\": false,\n  \"allow_curation_rewards\": false,\n  \"beneficiaries\": [],\n  \"url\": \"\",\n  \"root_title\": \"\",\n  \"pending_payout_value\": \"0.000 STEEM\",\n  \"total_pending_payout_value\": \"0.000 STEEM\",\n  \"active_votes\": [],\n  \"replies\": [],\n  \"author_reputation\": 0,\n  \"promoted\": \"0.000 STEEM\",\n  \"body_length\": 0,\n  \"reblogged_by\": []\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_content\", \"params\":[\"steemit\", \"firstpost\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_content\", \"params\":[\"alice\", \"a-post-by-alice\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_content_replies \nReturns a list of replies.  Parameters: author:string; permlink:string\n\n\n  \n    \n      author (string)\n      permlink (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      \"firstpost\"\n      Queries replies for a slug @steemit/firstpost\n    \n    \n      \"alice\"\n      \"a-post-by-alice\"\n      Queries replies for a slug @alice/a-post-by-alice\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"\"]\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"author\": \"\",\n  \"permlink\": \"\",\n  \"category\": \"\",\n  \"parent_author\": \"\",\n  \"parent_permlink\": \"\",\n  \"title\": \"\",\n  \"body\": \"\",\n  \"json_metadata\": \"\",\n  \"last_update\": \"1970-01-01T00:00:00\",\n  \"created\": \"1970-01-01T00:00:00\",\n  \"active\": \"1970-01-01T00:00:00\",\n  \"last_payout\": \"1970-01-01T00:00:00\",\n  \"depth\": 0,\n  \"children\": 0,\n  \"net_rshares\": 0,\n  \"abs_rshares\": 0,\n  \"vote_rshares\": 0,\n  \"children_abs_rshares\": 0,\n  \"cashout_time\": \"1970-01-01T00:00:00\",\n  \"max_cashout_time\": \"1970-01-01T00:00:00\",\n  \"total_vote_weight\": 0,\n  \"reward_weight\": 0,\n  \"total_payout_value\": \"0.000 STEEM\",\n  \"curator_payout_value\": \"0.000 STEEM\",\n  \"author_rewards\": 0,\n  \"net_votes\": 0,\n  \"root_author\": \"\",\n  \"root_permlink\": \"\",\n  \"max_accepted_payout\": \"0.000 STEEM\",\n  \"percent_steem_dollars\": 0,\n  \"allow_replies\": false,\n  \"allow_votes\": false,\n  \"allow_curation_rewards\": false,\n  \"beneficiaries\": [],\n  \"url\": \"\",\n  \"root_title\": \"\",\n  \"pending_payout_value\": \"0.000 STEEM\",\n  \"total_pending_payout_value\": \"0.000 STEEM\",\n  \"active_votes\": [],\n  \"replies\": [],\n  \"author_reputation\": 0,\n  \"promoted\": \"0.000 STEEM\",\n  \"body_length\": 0,\n  \"reblogged_by\": []\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_content_replies\", \"params\":[\"steemit\", \"firstpost\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_content_replies\", \"params\":[\"alice\", \"a-post-by-alice\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_conversion_requests \nReturns a list of conversion request.  Parameters: id:integer\n\n\n  \n    \n      id (int)\n       \n    \n  \n  \n    \n      1234\n      Queries a conversion request with the id of 1234.\n    \n  \n\n\nQuery Parameters JSON \n[0]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_conversion_requests\", \"params\":[1234], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_current_median_history_price \n\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\"base\": \"0.000 STEEM\", \"quote\": \"0.000 STEEM\"}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_current_median_history_price\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_active \nReturns a list of discussions based on active.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_active\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_active\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_author_before_date \nReturns a list of discussions based on author before date.\nQuery Parameters JSON \n[\"\", \"\", \"1970-01-01T00:00:00\", 100]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_author_before_date\", \"params\":[\"steemit\",\"firstpost\",\"2016-04-19T22:49:43\",1], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_blog \nReturns a list of discussions by blog.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_blog\", \"params\":[{\"tag\":\"steemit\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_blog\", \"params\":[{\"tag\":\"alice\",\"limit\":10}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_cashout \nReturns a list of discussions by cashout.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_cashout\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_cashout\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_children \nReturns a list of discussions by children.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_children\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_children\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_comments \nReturns a list of discussions by comments.\nQuery Parameters JSON \n[\n  {\n    \"start_author\": \"\",\n    \"start_permlink\": \"\",\n    \"limit\": 100\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_comments\", \"params\":[{\"start_author\":\"steemit\",\"start_permlink\":\"firstpost\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_comments\", \"params\":[{\"start_author\":\"alice\",\"start_permlink\":\"a-post-by-alice\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_created \nReturns a list of discussions by created.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_created\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_created\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ncondenser_api.get_discussions_by_feed \nReturns a list of discussions by feed.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"start_author\": \"\",\n    \"start_permlink\": \"\",\n    \"limit\": 100\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_feed\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_feed\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_hot \nReturns a list of discussions by hot.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_hot\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_hot\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF13\n\n\n\n\ncondenser_api.get_discussions_by_promoted \nReturns a list of discussions by promoted.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_promoted\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_promoted\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_trending \nReturns a list of discussions by trending.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_trending\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_trending\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_discussions_by_votes \nReturns a list of discussions by votes.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_votes\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_discussions_by_votes\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_dynamic_global_properties \nReturns the current dynamic global properties.  See: Understanding Dynamic Global Properties\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\n  \"head_block_number\": 0,\n  \"head_block_id\": \"0000000000000000000000000000000000000000\",\n  \"time\": \"1970-01-01T00:00:00\",\n  \"current_witness\": \"\",\n  \"total_pow\": \"18446744073709551615\",\n  \"num_pow_witnesses\": 0,\n  \"virtual_supply\": \"0.000 STEEM\",\n  \"current_supply\": \"0.000 STEEM\",\n  \"confidential_supply\": \"0.000 STEEM\",\n  \"current_sbd_supply\": \"0.000 STEEM\",\n  \"confidential_sbd_supply\": \"0.000 STEEM\",\n  \"total_vesting_fund_steem\": \"0.000 STEEM\",\n  \"total_vesting_shares\": \"0.000 STEEM\",\n  \"total_reward_fund_steem\": \"0.000 STEEM\",\n  \"total_reward_shares2\": \"0\",\n  \"pending_rewarded_vesting_shares\": \"0.000 STEEM\",\n  \"pending_rewarded_vesting_steem\": \"0.000 STEEM\",\n  \"sbd_interest_rate\": 0,\n  \"sbd_print_rate\": 10000,\n  \"maximum_block_size\": 0,\n  \"current_aslot\": 0,\n  \"recent_slots_filled\": \"0\",\n  \"participation_count\": 0,\n  \"last_irreversible_block_num\": 0,\n  \"vote_power_reserve_rate\": 40,\n  \"average_block_size\": 0,\n  \"current_reserve_ratio\": 1,\n  \"max_virtual_bandwidth\": \"0\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_dynamic_global_properties\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ncondenser_api.get_escrow \nReturns the escrow for a certain account by id.\nQuery Parameters JSON \n[\"\", 0]\n\n\nExpected Response JSON \nnull\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_escrow\", \"params\":[\"steemit\", 1234], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ncondenser_api.get_expiring_vesting_delegations \nReturns the expiring vesting delegations for an account.  Parameters: account:string, after:timestamp\n\n\n  \n    \n      account (string)\n      after (timestamp)\n       \n    \n  \n  \n    \n      \"steemit\"\n      \"2018-01-01T00:00:00\"\n      Queries for expiring vesting after January 1st, 2018.\n    \n    \n      \"alice\"\n      \"2017-12-01T00:00:00\"\n      Queries for expiring vesting after December 1st, 2017.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"1970-01-01T00:00:00\"]\n\n\nExpected Response JSON \n[\n  {\n    \"id\": 0,\n    \"delegator\": \"\",\n    \"vesting_shares\": \"0.000000 VESTS\",\n    \"expiration\": \"1970-01-01T00:00:00\"\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_expiring_vesting_delegations\", \"params\":[\"steemit\",\"2018-01-01T00:00:00\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_expiring_vesting_delegations\", \"params\":[\"alice\",\"2017-12-01T00:00:00\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ncondenser_api.get_feed \nReturns a list of items in an account’s feed.  Parameters: account:string; start_entry_id:int; limit:int up to 500\n\n\n  \n    \n      account (string)\n      start_entry_id (int)\n      limit (int)\n       \n    \n  \n  \n    \n      \"steemit\"\n      0\n      1\n      Queries the account named steemit starting on the first item, up to 1 result.\n    \n    \n      \"alice\"\n      1\n      10\n      Queries the account named alice starting on the second item, up to 10 results.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", 0, 1]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_feed\", \"params\":[\"steemit\",0,1], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_feed\", \"params\":[\"alice\",1,10], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ncondenser_api.get_feed_entries \nReturns a list of entries in an account’s feed.  Parameters: account:string; start_entry_id:int; limit:int up to 500\n\n\n  \n    \n      account (string)\n      start_entry_id (int)\n      limit (int)\n       \n    \n  \n  \n    \n      \"steemit\"\n      0\n      1\n      Queries the account named steemit starting on the first item, up to 1 result.\n    \n    \n      \"alice\"\n      1\n      10\n      Queries the account named alice starting on the second item, up to 10 results.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", 0, 1]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_feed_entries\", \"params\":[\"steemit\",0,1], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_feed_entries\", \"params\":[\"alice\",1,10], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_feed_history \nReturns the history of price feed values.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"current_median_history\": {\"base\": \"0.000 STEEM\", \"quote\": \"0.000 STEEM\"},\n  \"price_history\": []\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_feed_history\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF9\n\n\n\n\ncondenser_api.get_follow_count \nReturns the count of followers/following for an account.  Parameters: account:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries the account named steemit.\n    \n    \n      \"alice\"\n      Queries the account named alice.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n{\n  \"account\": \"\",\n  \"follower_count\": 0,\n  \"following_count\": 0\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_follow_count\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_follow_count\", \"params\":[\"alice\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF9\n\n\n\n\ncondenser_api.get_followers \nReturns the list of followers for an account.  Parameters: account:string; start:string (account to start from); type:string e.g.: blog; limit:int up to 1000\n\n\n  \n    \n      account (string)\n      start (string)\n      type (string)\n      limit (int)\n       \n    \n  \n  \n    \n      \"steemit\"\n      null\n      \"blog\"\n      10\n      Queries for follows of the account named steemit, up to 10 results.\n    \n    \n      \"alice\"\n      null\n      \"ignore\"\n      100\n      Queries for mutes of the account named alice, up to 100 results.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"\", \"\", 1]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_followers\", \"params\":[\"steemit\",null,\"blog\",10], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_followers\", \"params\":[\"alice\",null,\"ignore\",100], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF9\n\n\n\n\ncondenser_api.get_following \nReturns the list of accounts that are following an account.  Parameters: account:string; start:string (account to start from); type:string e.g.: blog; limit:int up to 1000\n\n\n  \n    \n      account (string)\n      start (string)\n      type (string)\n      limit (int)\n       \n    \n  \n  \n    \n      \"steemit\"\n      null\n      \"blog\"\n      10\n      Queries for follows of the account named steemit, up to 10 results.\n    \n    \n      \"alice\"\n      null\n      \"ignore\"\n      100\n      Queries for mutes of the account named alice, up to 100 results.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"\", \"\", 1]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_following\", \"params\":[\"steemit\",null,\"blog\",10], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_following\", \"params\":[\"alice\",null,\"ignore\",100], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_hardfork_version \n\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n\"0.0.0\"\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_hardfork_version\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF16\n\n\n\n\ncondenser_api.get_key_references \nReturns all accounts that have the key associated with their owner or active authorities.\nQuery Parameters JSON \n[\n  [\n    \"STM5jZtLoV8YbxCxr4imnbWn61zMB24wwonpnVhfXRmv7j6fk3dTH\"\n  ]\n]\n\n\nExpected Response JSON \n[[\"steemit\"]]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_key_references\", \"params\":[[\"STM5jZtLoV8YbxCxr4imnbWn61zMB24wwonpnVhfXRmv7j6fk3dTH\"]], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_market_history \nReturns the market history for the internal SBD:STEEM market.  Parameters: bucket_seconds:int; start:timestamp; end:timestamp\n\n\n  \n    \n      bucket_seconds (int)\n      start (timestamp)\n      end (timestamp)\n       \n    \n  \n  \n    \n      15\n      \"2018-01-01T00:00:00\"\n      \"2018-01-02T00:00:00\"\n      Queries for market history between January 1st, 2018 and January 2nd, 2018, segmented by 15 seconds.\n    \n    \n      60\n      \"2018-01-01T00:00:00\"\n      \"2018-01-02T00:00:00\"\n      Queries for market history between January 1st, 2018 and January 2nd, 2018, segmented by one minute.\n    \n    \n      300\n      \"2018-01-01T00:00:00\"\n      \"2018-01-02T00:00:00\"\n      Queries for market history between January 1st, 2018 and January 2nd, 2018, segmented by five minutes.\n    \n    \n      3600\n      \"2018-01-01T00:00:00\"\n      \"2018-01-02T00:00:00\"\n      Queries for market history between January 1st, 2018 and January 2nd, 2018, segmented by one hour.\n    \n    \n      86400\n      \"2018-01-01T00:00:00\"\n      \"2018-01-02T00:00:00\"\n      Queries for market history between January 1st, 2018 and January 2nd, 2018, segmented by one day.\n    \n  \n\n\nQuery Parameters JSON \n[0, \"1970-01-01T00:00:00\", \"1970-01-01T00:00:00\"]\n\n\nExpected Response JSON \n[\n  {\n    \"id\": 0,\n    \"open\": \"1970-01-01T00:00:00\",\n    \"seconds\": 0,\n    \"steem\": {\n      \"high\": 0,\n      \"low\": 0,\n      \"open\": 0,\n      \"close\": 0,\n      \"volume\": 0\n    },\n    \"non_steem\": {\n      \"high\": 0,\n      \"low\": 0,\n      \"open\": 0,\n      \"close\": 0,\n      \"volume\": 0\n    }\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_market_history\", \"params\":[15,\"2018-01-01T00:00:00\",\"2018-01-02T00:00:00\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_market_history\", \"params\":[60,\"2018-01-01T00:00:00\",\"2018-01-02T00:00:00\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_market_history\", \"params\":[300,\"2018-01-01T00:00:00\",\"2018-01-02T00:00:00\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_market_history\", \"params\":[3600,\"2018-01-01T00:00:00\",\"2018-01-02T00:00:00\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_market_history\", \"params\":[86400,\"2018-01-01T00:00:00\",\"2018-01-02T00:00:00\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_market_history_buckets \nReturns the bucket seconds being tracked by the plugin.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n[15, 60, 300, 3600, 86400]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_market_history_buckets\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_next_scheduled_hardfork \nReturns the next scheduled hardfork.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\n  \"hf_version\": \"0.0.0\",\n  \"live_time\": \"1970-01-01T00:00:00\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_next_scheduled_hardfork\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_open_orders \nReturns the open orders for an account.  account:string\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_open_orders\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_open_orders\", \"params\":[\"alice\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_ops_in_block \nReturns all operations contained in a block.  Parameters: block_num:int; only_virtual:boolean\n\n\n  \n    \n      block_num (int)\n      only_virtual (boolean)\n       \n    \n  \n  \n    \n      1\n      false\n      Queries the operations in block #1.\n    \n    \n      5443322\n      true\n      Queries only the virtual operations in block #5,443,322.\n    \n  \n\n\nQuery Parameters JSON \n[0, false]\n\n\nExpected Response JSON \n[\n  {\n    \"trx_id\": \"0000000000000000000000000000000000000000\",\n    \"block\": 0,\n    \"trx_in_block\": 0,\n    \"op_in_trx\": 0,\n    \"virtual_op\": 0,\n    \"timestamp\": \"2016-10-01T06:31:24\",\n    \"op\": [\n      \"producer_reward\",\n      {\n        \"producer\": \"\",\n        \"vesting_shares\": \"0.000000 VESTS\"\n      }\n    ]\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_ops_in_block\", \"params\":[1,false], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_ops_in_block\", \"params\":[5443322,true], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_order_book \nReturns the internal market order book.  Parameters: limit:int up to 500\n\n\n  \n    \n      limit (int)\n       \n    \n  \n  \n    \n      10\n      Queries up to 10 items in the order book.\n    \n    \n      500\n      Queries up to 500 items in the order book.\n    \n  \n\n\nQuery Parameters JSON \n[0]\n\n\nExpected Response JSON \n{\"bids\": [], \"asks\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_order_book\", \"params\":[10], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_order_book\", \"params\":[50], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_owner_history \nReturns the owner history of an account.  Parameters: account:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries the owner history for account named “steemit”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_owner_history\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ncondenser_api.get_post_discussions_by_payout \nReturns a list of post discussions by payout.\nQuery Parameters JSON \n[\n  {\n    \"tag\": \"\",\n    \"limit\": 0,\n    \"filter_tags\": [],\n    \"select_authors\": [],\n    \"select_tags\": [],\n    \"truncate_body\": 0\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_post_discussions_by_payout\", \"params\":[{\"tag\":\"steem\",\"limit\":1}], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_post_discussions_by_payout\", \"params\":[{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_potential_signatures \nThis method will return the set of all public keys that could possibly sign for a given transaction.\nQuery Parameters JSON \n[\n  {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  }\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_potential_signatures\", \"params\":[{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[[\"pow\",{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}]],\"extensions\":[],\"signatures\":[]}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ncondenser_api.get_reblogged_by \nReturns a list of authors that have reblogged a post.  Parameters: author:string; permlink:string\n\n\n  \n    \n      author (string)\n      permlink (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      \"firstpost\"\n      Queries reblogs for content with a slug @steemit/firstpost\n    \n    \n      \"alice\"\n      \"a-post-by-alice\"\n      Queries reblogs for content with a slug @alice/a-post-by-alice\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"\"]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_reblogged_by\", \"params\":[\"steemit\",\"firstpost\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_reblogged_by\", \"params\":[\"alice\",\"a-post-by-alice\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_recent_trades \nReturns the most recent trades for the internal SBD:STEEM market.  Parameters: limit:int up to 1000\n\n\n  \n    \n      limit (int)\n       \n    \n  \n  \n    \n      10\n      Queries up to 10 latest trades.\n    \n    \n      500\n      Queries up to 500 latest trades.\n    \n  \n\n\nQuery Parameters JSON \n[1]\n\n\nExpected Response JSON \n[\n  {\n    \"date\": \"1970-01-01T00:00:00\",\n    \"current_pays\": \"0.0 SBD\",\n    \"open_pays\": \"0.0 STEEM\"\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_recent_trades\", \"params\":[10], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_recent_trades\", \"params\":[500], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF11\n\n\n\n\ncondenser_api.get_recovery_request \nReturns the recovery request for an account.  Parameters: account:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries the recovery requests for account named “steemit”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \nnull\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_recovery_request\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_replies_by_last_update \nReturns a list of replies by last update.  start_parent_author:string, start_permlink:string, limit:int up to 100\nQuery Parameters JSON \n[\"\", \"\", 1]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_replies_by_last_update\", \"params\":[\"steemit\",\"firstpost\",1], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_required_signatures \nThis API will take a partially signed transaction and a set of public keys that the owner has the ability to sign for and return the minimal subset of public keys that should add signatures to the transaction. Parameters: trx:object; available_keys:[string]\n\nQuery Parameters JSON \n[\n  {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  },\n  []\n]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_required_signatures\", \"params\":[{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[[\"pow\",{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}]],\"extensions\":[],\"signatures\":[]},[]], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ncondenser_api.get_reward_fund \nReturns information about the current reward funds.\nQuery Parameters JSON \n[\"post\"]\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"name\": \"\",\n  \"reward_balance\": \"0.000 STEEM\",\n  \"recent_claims\": \"0\",\n  \"last_update\": \"1970-01-01T00:00:00\",\n  \"content_constant\": \"0\",\n  \"percent_curation_rewards\": 0,\n  \"percent_content_rewards\": 0,\n  \"author_reward_curve\": \"quadratic\",\n  \"curation_reward_curve\": \"34723648\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_reward_fund\", \"params\":[\"post\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ncondenser_api.get_savings_withdraw_from \nReturns savings withdraw from an account.  Parameters: account:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries the savings withdraw for account named “steemit”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_savings_withdraw_from\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ncondenser_api.get_savings_withdraw_to \nReturns the savings withdraw to an account.  Parameters: account:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries the savings withdraw for account named “steemit”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_savings_withdraw_to\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\nDeprecated\n\n\n\ncondenser_api.get_state \nReturns the state of a path.  Deprecated.  Parameters: path:string\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n{\n  \"current_route\": \"\",\n  \"props\": {\n    \"head_block_number\": 0,\n    \"head_block_id\": \"0000000000000000000000000000000000000000\",\n    \"time\": \"1970-01-01T00:00:00\",\n    \"current_witness\": \"\",\n    \"total_pow\": \"18446744073709551615\",\n    \"num_pow_witnesses\": 0,\n    \"virtual_supply\": \"0.000 STEEM\",\n    \"current_supply\": \"0.000 STEEM\",\n    \"confidential_supply\": \"0.000 STEEM\",\n    \"current_sbd_supply\": \"0.000 STEEM\",\n    \"confidential_sbd_supply\": \"0.000 STEEM\",\n    \"total_vesting_fund_steem\": \"0.000 STEEM\",\n    \"total_vesting_shares\": \"0.000 STEEM\",\n    \"total_reward_fund_steem\": \"0.000 STEEM\",\n    \"total_reward_shares2\": \"0\",\n    \"pending_rewarded_vesting_shares\": \"0.000 STEEM\",\n    \"pending_rewarded_vesting_steem\": \"0.000 STEEM\",\n    \"sbd_interest_rate\": 0,\n    \"sbd_print_rate\": 10000,\n    \"maximum_block_size\": 0,\n    \"current_aslot\": 0,\n    \"recent_slots_filled\": \"0\",\n    \"participation_count\": 0,\n    \"last_irreversible_block_num\": 0,\n    \"vote_power_reserve_rate\": 40,\n    \"average_block_size\": 0,\n    \"current_reserve_ratio\": 1,\n    \"max_virtual_bandwidth\": \"0\"\n  },\n  \"tag_idx\": {\"trending\": []},\n  \"tags\": {},\n  \"content\": {},\n  \"accounts\": {},\n  \"witnesses\": {},\n  \"discussion_idx\": {},\n  \"witness_schedule\": {\n    \"id\": 0,\n    \"current_virtual_time\": \"0\",\n    \"next_shuffle_block_num\": 1,\n    \"current_shuffled_witnesses\": [],\n    \"num_scheduled_witnesses\": 1,\n    \"top19_weight\": 1,\n    \"timeshare_weight\": 5,\n    \"miner_weight\": 1,\n    \"witness_pay_normalization_factor\": 25,\n    \"median_props\": {\n      \"account_creation_fee\": \"0.000 STEEM\",\n      \"maximum_block_size\": 131072,\n      \"sbd_interest_rate\": 1000\n    },\n    \"majority_version\": \"0.0.0\",\n    \"max_voted_witnesses\": 19,\n    \"max_miner_witnesses\": 1,\n    \"max_runner_witnesses\": 1,\n    \"hardfork_required_witnesses\": 17\n  },\n  \"feed_price\": {\"base\": \"0.000 STEEM\", \"quote\": \"0.000 STEEM\"},\n  \"error\": \"\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_state\", \"params\":[\"/@steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_tags_used_by_author \nReturns a list of tags used by an author.  Parameters: author:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries the tags used by the account named “steemit”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_tags_used_by_author\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_ticker \nReturns the market ticker for the internal SBD:STEEM market.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\n  \"latest\": \"0.00000000000000000\",\n  \"lowest_ask\": \"0.00000000000000000\",\n  \"highest_bid\": \"0.00000000000000000\",\n  \"percent_change\": \"0.00000000000000000\",\n  \"steem_volume\": \"0.000 STEEM\",\n  \"sbd_volume\": \"0.000 STEEM\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_ticker\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_trade_history \nReturns the trade history for the internal SBD:STEEM market.  Parameters: start:timestamp; end:timestamp; limit:int up to 1000\n\n\n  \n    \n      start (timestamp)\n      end (timestamp)\n      limit (int)\n       \n    \n  \n  \n    \n      \"2018-01-01T00:00:00\"\n      \"2018-01-02T00:00:00\"\n      10\n      Queries up to 10 trades between January 1st, 2018 and January 2nd, 2018.\n    \n  \n\n\nQuery Parameters JSON \n[\n  \"1970-01-01T00:00:00\",\n  \"1970-01-01T00:00:00\",\n  1000\n]\n\n\nExpected Response JSON \n[\n  {\n    \"date\": \"1970-01-01T00:00:00\",\n    \"current_pays\": \"0.000 SBD\",\n    \"open_pays\": \"0.000 STEEM\"\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_trade_history\", \"params\":[\"2018-01-01T00:00:00\",\"2018-01-02T00:00:00\",10], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_transaction \nReturns the details of a transaction based on a transaction id.  Parameters: trx_id:string\n\n\n  \n    \n      trx_id (string)\n       \n    \n  \n  \n    \n      \"6fde0190a97835ea6d9e651293e90c89911f933c\"\n      Queries for this exact transaction id.\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n{\n  \"ref_block_num\": 0,\n  \"ref_block_prefix\": 0,\n  \"expiration\": \"1970-01-01T00:00:00\",\n  \"operations\": [],\n  \"extensions\": [],\n  \"signatures\": [],\n  \"transaction_id\": \"0000000000000000000000000000000000000000\",\n  \"block_num\": 0,\n  \"transaction_num\": 0\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_transaction\", \"params\":[\"6fde0190a97835ea6d9e651293e90c89911f933c\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_transaction_hex \nReturns a hexdump of the serialized binary form of a transaction.\nQuery Parameters JSON \n[\n  {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  }\n]\n\n\nExpected Response JSON \n\"\"\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_transaction_hex\", \"params\":[{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[[\"pow\",{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}]],\"extensions\":[],\"signatures\":[]}], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_trending_tags \nReturns the list of trending tags.  Parameter: start_tag:string; limit:int up to 100\n\n\n  \n    \n      tag (string)\n      limit (int)\n       \n    \n  \n  \n    \n      null\n      100\n      Queries the top 100 trending tags.\n    \n    \n      \"steem\"\n      10\n      Queries the tags after “steem”, up to 10 tags.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", 1]\n\n\nExpected Response JSON \n[\n  {\n    \"name\": \"\",\n    \"total_payouts\": \"0.000 SBD\",\n    \"net_votes\": 0,\n    \"top_posts\": 0,\n    \"comments\": 0,\n    \"trending\": \"\"\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_trending_tags\", \"params\":[null,100], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_trending_tags\", \"params\":[\"steem\",10], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_version \nReturns the versions of blockchain, steem, and FC.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\n  \"blockchain_version\": \"\",\n  \"steem_revision\": \"\",\n  \"fc_revision\": \"\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_version\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ncondenser_api.get_vesting_delegations \nReturns the vesting delegations by an account.  Parameters: delegator_account:string; start_account:string; limit:int up to 1000\n\n\n  \n    \n      delegator_account (string)\n      start_account (string)\n      limit (int)\n       \n    \n  \n  \n    \n      \"steemit\"\n      null\n      10\n      Queries up to 10 vesting delegations by “steemit”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"\", 1]\n\n\nExpected Response JSON \n[\n  {\n    \"id\": 0,\n    \"delegator\": \"\",\n    \"delegatee\": \"\",\n    \"vesting_shares\": \"0.000000 VESTS\",\n    \"min_delegation_time\": \"1970-01-01T00:00:00\"\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_vesting_delegations\", \"params\":[\"steemit\",null,10], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_volume \nReturns the market volume for the past 24 hours.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\n  \"steem_volume\": \"0.000 STEEM\",\n  \"sbd_volume\": \"0.000 STEEM\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_volume\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_withdraw_routes \nReturns the withdraw routes for an account.  Parameters: account:string; type:string\n\n\n  \n    \n      account (string)\n      type (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      \"outgoing\"\n      Queries outgoing withdraw routes by “steemit”.\n    \n    \n      \"steemit\"\n      \"incoming\"\n      Queries incoming withdraw routes by “steemit”.\n    \n    \n      \"steemit\"\n      \"all\"\n      Queries all withdraw routes by “steemit”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", \"\"]\n\n\nExpected Response JSON \n[\n  {\n    \"id\": 0,\n    \"from_account\": \"\",\n    \"to_account\": \"\",\n    \"percent\": 0,\n    \"auto_vest\": false\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_withdraw_routes\", \"params\":[\"steemit\",\"outgoing\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_withdraw_routes\", \"params\":[\"steemit\",\"incoming\"], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_withdraw_routes\", \"params\":[\"steemit\",\"all\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_witness_by_account \nReturns the witness of an account.  Parameters: account:string\n\n\n  \n    \n      account (string)\n       \n    \n  \n  \n    \n      \"steemit\"\n      Queries witness account of “steemit” (of null if none exists).\n    \n  \n\n\nQuery Parameters JSON \n[\"\"]\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"owner\": \"\",\n  \"created\": \"1970-01-01T00:00:00\",\n  \"url\": \"\",\n  \"votes\": \"0\",\n  \"virtual_last_update\": \"0\",\n  \"virtual_position\": \"0\",\n  \"virtual_scheduled_time\": \"0\",\n  \"total_missed\": 0,\n  \"last_aslot\": 0,\n  \"last_confirmed_block_num\": 0,\n  \"pow_worker\": 0,\n  \"signing_key\": \"\",\n  \"props\": {\n    \"account_creation_fee\": \"0.000 STEEM\",\n    \"maximum_block_size\": 65536,\n    \"sbd_interest_rate\": 0\n  },\n  \"sbd_exchange_rate\": {\"base\": \"0.000 SBD\", \"quote\": \"0.000 STEEM\"},\n  \"last_sbd_exchange_update\": \"1970-01-01T00:00:00\",\n  \"last_work\": \"\",\n  \"running_version\": \"\",\n  \"hardfork_version_vote\": \"\",\n  \"hardfork_time_vote\": \"1970-01-01T00:00:00\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_witness_by_account\", \"params\":[\"steemit\"], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_witness_count \n\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n0\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_witness_count\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_witness_schedule \nReturns the current witness schedule.\nQuery Parameters JSON \n[]\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"current_virtual_time\": \"0\",\n  \"next_shuffle_block_num\": 1,\n  \"current_shuffled_witnesses\": [],\n  \"num_scheduled_witnesses\": 1,\n  \"top19_weight\": 1,\n  \"timeshare_weight\": 5,\n  \"miner_weight\": 1,\n  \"witness_pay_normalization_factor\": 25,\n  \"median_props\": {\n    \"account_creation_fee\": \"0.000 STEEM\",\n    \"maximum_block_size\": 131072,\n    \"sbd_interest_rate\": 1000\n  },\n  \"majority_version\": \"0.0.0\",\n  \"max_voted_witnesses\": 19,\n  \"max_miner_witnesses\": 1,\n  \"max_runner_witnesses\": 1,\n  \"hardfork_required_witnesses\": 17\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_witness_schedule\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_witnesses \nReturns current witnesses.\nQuery Parameters JSON \n[[0]]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_witnesses\", \"params\":[[28]], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.get_witnesses_by_vote \nReturns current witnesses by vote.  Parameters: start_name:string; limit:int up to 1000\n\n\n  \n    \n      account (string)\n      limit (int)\n       \n    \n  \n  \n    \n      null\n      21\n      Queries top 21 witness votes.\n    \n    \n      \"a\"\n      1\n      Queries top 10 witness votes starting with “a”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", 1000]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_witnesses_by_vote\", \"params\":[null, 21], \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_witnesses_by_vote\", \"params\":[\"a\", 1], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.lookup_account_names \nLooks up account names.  accounts:[string]\nQuery Parameters JSON \n[[\"steemit\"]]\n\n\nExpected Response JSON \n[\n  {\n    \"id\": 28,\n    \"name\": \"steemit\",\n    \"owner\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM5tfrdPG1Ycjwa9FuBUueDFFyygndBLXdVEEs2c9eRKScnFk6vM\",\n          1\n        ],\n        [\n          \"STM71f6yWztimJuREVyyMXNqAVbx1FzPVW6LLXNoQ35dHwKuszmHX\",\n          1\n        ],\n        [\n          \"STM7U3ymhUTuKME72dpdpQkdQvh722gTLjKBKtmKQPPWgtkr418Nf\",\n          1\n        ]\n      ]\n    },\n    \"active\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM5832HKCJzs6K3rRCsZ1PidTKgjF38ZJb718Y3pCW92HEMsCGPf\",\n          1\n        ],\n        [\n          \"STM7Q2rLBqzPzFeteQZewv9Lu3NLE69fZoLeL6YK59t7UmssCBNTU\",\n          1\n        ]\n      ]\n    },\n    \"posting\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM5jZtLoV8YbxCxr4imnbWn61zMB24wwonpnVhfXRmv7j6fk3dTH\",\n          1\n        ],\n        [\n          \"STM7xVFaqi8RxhWKZwuLA2bKrAiQmhnrbgvw4e2ChAsKYQbPjqUq2\",\n          1\n        ],\n        [\n          \"STM83dmDkQcZU9X8MWcxsTztSyutE6udrb55PvYgu7RLzStaoAt67\",\n          1\n        ]\n      ]\n    },\n    \"memo_key\": \"STM5jZtLoV8YbxCxr4imnbWn61zMB24wwonpnVhfXRmv7j6fk3dTH\",\n    \"json_metadata\": \"\",\n    \"proxy\": \"\",\n    \"last_owner_update\": \"2017-03-16T21:17:51\",\n    \"last_account_update\": \"2017-03-16T23:10:36\",\n    \"created\": \"2016-03-24T17:00:21\",\n    \"mined\": true,\n    \"recovery_account\": \"steem\",\n    \"last_account_recovery\": \"1970-01-01T00:00:00\",\n    \"reset_account\": \"null\",\n    \"comment_count\": 0,\n    \"lifetime_vote_count\": 0,\n    \"post_count\": 1,\n    \"can_vote\": true,\n    \"voting_power\": 9950,\n    \"last_vote_time\": \"2016-12-04T23:10:57\",\n    \"balance\": \"0.006 STEEM\",\n    \"savings_balance\": \"11006644.632 STEEM\",\n    \"sbd_balance\": \"8581.890 SBD\",\n    \"sbd_seconds\": \"18846158467785\",\n    \"sbd_seconds_last_update\": \"2018-04-10T04:08:36\",\n    \"sbd_last_interest_payment\": \"2018-03-15T17:58:24\",\n    \"savings_sbd_balance\": \"0.000 SBD\",\n    \"savings_sbd_seconds\": \"0\",\n    \"savings_sbd_seconds_last_update\": \"1970-01-01T00:00:00\",\n    \"savings_sbd_last_interest_payment\": \"1970-01-01T00:00:00\",\n    \"savings_withdraw_requests\": 0,\n    \"reward_sbd_balance\": \"0.000 SBD\",\n    \"reward_steem_balance\": \"0.000 STEEM\",\n    \"reward_vesting_balance\": \"0.000000 VESTS\",\n    \"reward_vesting_steem\": \"0.000 STEEM\",\n    \"vesting_shares\": \"90039851836.689703 VESTS\",\n    \"delegated_vesting_shares\": \"0.000000 VESTS\",\n    \"received_vesting_shares\": \"0.000000 VESTS\",\n    \"vesting_withdraw_rate\": \"0.000000 VESTS\",\n    \"next_vesting_withdrawal\": \"1969-12-31T23:59:59\",\n    \"withdrawn\": 0,\n    \"to_withdraw\": 0,\n    \"withdraw_routes\": 0,\n    \"curation_rewards\": 0,\n    \"posting_rewards\": 3548,\n    \"proxied_vsf_votes\": [\"28583799126\", 0, 0, 0],\n    \"witnesses_voted_for\": 0,\n    \"last_post\": \"2016-03-30T18:30:18\",\n    \"last_root_post\": \"2016-03-30T18:30:18\"\n  }\n]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.lookup_account_names\", \"params\":[[\"steemit\"]], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.lookup_accounts \nLooks up accounts starting with name.  Parameterslower_bound_name:string; limit:int up to 1000\n\n\n  \n    \n      lower_bound_name (string)\n      limit (int)\n       \n    \n  \n  \n    \n      \"a\"\n      10\n      Queries up to 10 accounts that start with “a”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", 1]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.lookup_accounts\", \"params\":[\"a\",10], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.lookup_witness_accounts \nLooks up witness accounts starting with name.  Parameters: lower_bound_name:string; limit:int up to 1000\n\n\n  \n    \n      lower_bound_name (string)\n      limit (int)\n       \n    \n  \n  \n    \n      \"a\"\n      10\n      Queries up to 10 witnesses that start with “a”.\n    \n  \n\n\nQuery Parameters JSON \n[\"\", 1]\n\n\nExpected Response JSON \n[]\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.lookup_witness_accounts\", \"params\":[\"a\",10], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\nDisabled\n\n\ncondenser_api.verify_account_authority \nNot Implemented\n\nQuery Parameters JSON \n[\"\", [\"\"]]\n\n\nExpected Response JSON \nfalse\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.verify_account_authority\", \"params\":[\"steemit\",[\"STM7Q2rLBqzPzFeteQZewv9Lu3NLE69fZoLeL6YK59t7UmssCBNTU\"]], \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ncondenser_api.verify_authority \nReturns true if the transaction has all of the required signatures.\nQuery Parameters JSON \n[\n  {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  }\n]\n\n\nExpected Response JSON \nfalse\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.verify_authority\", \"params\":[{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[[\"pow\",{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}]],\"extensions\":[],\"signatures\":[]}], \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-database-api": {
							"id": "apidefinitions-database-api",
							"title": "Database Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsdatabase-api",
							"content": "Used query information about accounts, transactions, and blockchain data. These AppBase API methods are still under development and subject to change.\n\n\n\nSince: HF11\n\n\n\n\ndatabase_api.find_account_recovery_requests \nReturns a list of account recovery requests.\nQuery Parameters JSON \n{\"accounts\": []}\n\n\nExpected Response JSON \n{\"requests\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.find_accounts \nSearch for accounts.\nQuery Parameters JSON \n{\"accounts\": []}\n\n\nExpected Response JSON \n{\"accounts\": []}\n\n\n\n\n\n\n\nSince: HF11\n\n\n\n\ndatabase_api.find_change_recovery_account_requests \nReturns a list of requests to change the recovery account.\nQuery Parameters JSON \n{\"accounts\": []}\n\n\nExpected Response JSON \n{\"requests\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.find_comments \nSearch for comments.\nQuery Parameters JSON \n{\"comments\": []}\n\n\nExpected Response JSON \n{\"comments\": []}\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ndatabase_api.find_decline_voting_rights_requests \nReturns a list of requests to decline voting rights.\nQuery Parameters JSON \n{\"accounts\": []}\n\n\nExpected Response JSON \n{\"requests\": []}\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ndatabase_api.find_escrows \nReturns a list of escrows.\nQuery Parameters JSON \n{\"from\": \"\"}\n\n\nExpected Response JSON \n{\"escrows\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.find_limit_orders \nReturns a list of limit orders.\nQuery Parameters JSON \n{\"account\": \"\"}\n\n\nExpected Response JSON \n{\"orders\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.find_owner_histories \nReturns owner authority history.\nQuery Parameters JSON \n{\"owner\": \"\"}\n\n\nExpected Response JSON \n{\"owner_auths\": []}\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ndatabase_api.find_savings_withdrawals \nReturns the list of savings withdrawls for an account.\nQuery Parameters JSON \n{\"account\": \"\"}\n\n\nExpected Response JSON \n{\"withdrawals\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.find_sbd_conversion_requests \nReturns the list of SBD conversion requests for an account.\nQuery Parameters JSON \n{\"account\": \"\"}\n\n\nExpected Response JSON \n{\"requests\": []}\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ndatabase_api.find_vesting_delegation_expirations \nReturns the expirations for vesting delegations.\nQuery Parameters JSON \n{\"account\": \"\"}\n\n\nExpected Response JSON \n{\"delegations\": []}\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ndatabase_api.find_vesting_delegations \nReturns the list of vesting delegations for an account.\nQuery Parameters JSON \n{\"account\": \"\"}\n\n\nExpected Response JSON \n{\"delegations\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.find_votes \nReturns the votes for an author and permlink.\nQuery Parameters JSON \n{\"author\": \"\", \"permlink\": \"\"}\n\n\nExpected Response JSON \n{\"votes\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.find_withdraw_vesting_routes \nReturns the list of vesting withdraw routes for an account.\nQuery Parameters JSON \n{\"account\": \"\", \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"routes\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.find_witnesses \nSearch for witnesses.\nQuery Parameters JSON \n{\"owners\": []}\n\n\nExpected Response JSON \n{\"witnesses\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_active_witnesses \nReturns the list of active witnesses.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\"witnesses\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_active_witnesses\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_config \nReturns information about compile-time constants.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_config\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_current_price_feed \nReturns the current price feed.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\n  \"base\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"quote\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  }\n}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_dynamic_global_properties \nReturns the current dynamic global properties.  See: Understanding Dynamic Global Properties\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"head_block_number\": 0,\n  \"head_block_id\": \"0000000000000000000000000000000000000000\",\n  \"time\": \"1970-01-01T00:00:00\",\n  \"current_witness\": \"\",\n  \"total_pow\": \"18446744073709551615\",\n  \"num_pow_witnesses\": 0,\n  \"virtual_supply\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"current_supply\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"confidential_supply\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"current_sbd_supply\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000013\"\n  },\n  \"confidential_sbd_supply\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000013\"\n  },\n  \"total_vesting_fund_steem\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"total_vesting_shares\": {\n    \"amount\": \"0\",\n    \"precision\": 6,\n    \"nai\": \"@@000000037\"\n  },\n  \"total_reward_fund_steem\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"total_reward_shares2\": \"0\",\n  \"pending_rewarded_vesting_shares\": {\n    \"amount\": \"0\",\n    \"precision\": 6,\n    \"nai\": \"@@000000037\"\n  },\n  \"pending_rewarded_vesting_steem\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"sbd_interest_rate\": 0,\n  \"sbd_print_rate\": 10000,\n  \"maximum_block_size\": 0,\n  \"current_aslot\": 0,\n  \"recent_slots_filled\": \"0\",\n  \"participation_count\": 0,\n  \"last_irreversible_block_num\": 0,\n  \"vote_power_reserve_rate\": 40\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_dynamic_global_properties\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_feed_history \nReturns the history of price feed values.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"current_median_history\": {\n    \"base\": {\n      \"amount\": \"0\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    },\n    \"quote\": {\n      \"amount\": \"0\\\"\",\n      \"precision\": 3,\n      \"nai\": \"@@000000021\"\n    }\n  },\n  \"price_history\": []\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_feed_history\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_hardfork_properties \nReturns the current properties about the blockchain’s hardforks.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"processed_hardforks\": [],\n  \"last_hardfork\": 0,\n  \"current_hardfork_version\": \"0.0.0\",\n  \"next_hardfork\": \"0.0.0\",\n  \"next_hardfork_time\": \"1970-01-01T00:00:00\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_hardfork_properties\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_order_book \nReturns the order book.\nQuery Parameters JSON \n{\"limit\": 0}\n\n\nExpected Response JSON \n{\"asks\": [], \"bids\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_order_book\", \"params\":{\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_order_book\", \"params\":{\"limit\":50}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_potential_signatures \nThis method will return the set of all public keys that could possibly sign for a given transaction.\nQuery Parameters JSON \n{\n  \"trx\": {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  }\n}\n\n\nExpected Response JSON \n{\"keys\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_potential_signatures\", \"params\":{\"trx\":{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[{\"type\":\"pow_operation\",\"value\":{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}}],\"extensions\":[],\"signatures\":[]}}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_required_signatures \nThis API will take a partially signed transaction and a set of public keys that the owner has the ability to sign for and return the minimal subset of public keys that should add signatures to the transaction.\nQuery Parameters JSON \n{\n  \"trx\": {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  },\n  \"available_keys\": []\n}\n\n\nExpected Response JSON \n{\"keys\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_required_signatures\", \"params\":{\"trx\":{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[{\"type\":\"pow_operation\",\"value\":{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}}],\"extensions\":[],\"signatures\":[]},\"available_keys\":[]}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ndatabase_api.get_reward_funds \nReturns information about the current reward funds.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\"funds\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_reward_funds\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_transaction_hex \nReturns a hexdump of the serialized binary form of a transaction.\nQuery Parameters JSON \n{\n  \"trx\": {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  }\n}\n\n\nExpected Response JSON \n{\"hex\": \"\"}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_transaction_hex\", \"params\":{\"trx\":{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[{\"type\":\"pow_operation\",\"value\":{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}}],\"extensions\":[],\"signatures\":[]}}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.get_witness_schedule \nReturns the current witness schedule.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"current_virtual_time\": \"0\",\n  \"next_shuffle_block_num\": 0,\n  \"current_shuffled_witnesses\": [],\n  \"num_scheduled_witnesses\": 48,\n  \"top19_weight\": 77,\n  \"timeshare_weight\": 16,\n  \"miner_weight\": 2,\n  \"witness_pay_normalization_factor\": 0,\n  \"median_props\": {\n    \"account_creation_fee\": [\n      {\"amount\": \"1\"},\n      {\"precision\": 3},\n      {\"nai\": \"@@000000021\"}\n    ],\n    \"maximum_block_size\": 131072,\n    \"sbd_interest_rate\": 1000,\n    \"account_subsidy_limit\": 0\n  },\n  \"majority_version\": \"0.0.0\",\n  \"max_voted_witnesses\": 48,\n  \"max_miner_witnesses\": 77,\n  \"max_runner_witnesses\": 16,\n  \"hardfork_required_witnesses\": 2\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.get_witness_schedule\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF11\n\n\n\n\ndatabase_api.list_account_recovery_requests \nReturns a list of account recovery requests.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"requests\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_accounts \nReturns a list of accounts.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"accounts\": []}\n\n\n\n\n\n\n\nSince: HF11\n\n\n\n\ndatabase_api.list_change_recovery_account_requests \nReturns a list of recovery account change requests.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"requests\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_comments \nReturns a list of comments.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"comments\": []}\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ndatabase_api.list_decline_voting_rights_requests \nReturns a list of decline voting rights requests.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"requests\": []}\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ndatabase_api.list_escrows \nReturns a list of escrows.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"escrows\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_limit_orders \nReturns a list of limit orders.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"orders\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_owner_histories \nReturns a list of owner authority histories.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0}\n\n\nExpected Response JSON \n{\"owner_auths\": []}\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ndatabase_api.list_savings_withdrawals \nReturns a list of savings withdrawls.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"withdrawals\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_sbd_conversion_requests \nReturns a list of SBD conversion requests.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"requests\": []}\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ndatabase_api.list_vesting_delegation_expirations \nReturns a list of vesting delegation expirations.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"delegations\": []}\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ndatabase_api.list_vesting_delegations \nReturns a list of vesting delegations.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"delegations\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_votes \nReturns a list of votes.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"votes\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_withdraw_vesting_routes \nReturns a list of vesting withdraw routes.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"routes\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_witness_votes \nReturns a list of witness votes.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"votes\": []}\n\n\n\n\n\n\n\n\n\n\ndatabase_api.list_witnesses \nReturns the list of witnesses.\nQuery Parameters JSON \n{\"start\": null, \"limit\": 0, \"order\": \"by_name\"}\n\n\nExpected Response JSON \n{\"witnesses\": []}\n\n\n\n\n\n\n\n\n\nDisabled\n\n\ndatabase_api.verify_account_authority \nNot Implemented\n\nQuery Parameters JSON \n{\"account\": \"\", \"signers\": []}\n\n\nExpected Response JSON \n{\"valid\": false}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.verify_account_authority\", \"params\":{\"account\":\"steemit\",\"signers\":[\"STM7Q2rLBqzPzFeteQZewv9Lu3NLE69fZoLeL6YK59t7UmssCBNTU\"]}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.verify_authority \nReturns true if the transaction has all of the required signatures.\nQuery Parameters JSON \n{\n  \"trx\": {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  }\n}\n\n\nExpected Response JSON \n{\"valid\": false}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"database_api.verify_authority\", \"params\":{\"trx\":{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[{\"type\":\"pow_operation\",\"value\":{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}}],\"extensions\":[],\"signatures\":[]}}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ndatabase_api.verify_signatures \nThis is a general purpose API that checks signatures against accounts for an arbitrary sha256 hash using the existing authority structures.\nQuery Parameters JSON \n{\n  \"hash\": \"0000000000000000000000000000000000000000000000000000000000000000\",\n  \"signatures\": [],\n  \"required_owner\": [],\n  \"required_active\": [],\n  \"required_posting\": [],\n  \"required_other\": []\n}\n\n\nExpected Response JSON \n{\"valid\": false}"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-follow-api": {
							"id": "apidefinitions-follow-api",
							"title": "Follow Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsfollow-api",
							"content": "Used to lookup information related to reputation and account follow operations. These AppBase API methods are still under development and subject to change.\n\n\n\nSince: HF13\n\n\n\n\nfollow_api.get_account_reputations \nReturns a list of account reputations.\nQuery Parameters JSON \n{\"account_lower_bound\": \"\", \"limit\": 1000}\n\n\nExpected Response JSON \n{\"reputations\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_account_reputations\", \"params\":{\"account_lower_bound\":\"steemit\", \"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_account_reputations\", \"params\":{\"account_lower_bound\":\"a\", \"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nfollow_api.get_blog \nReturns the list of blog entries for an account.\nQuery Parameters JSON \n{\"account\": \"\", \"start_entry_id\": 0, \"limit\": 500}\n\n\nExpected Response JSON \n{\"blog\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_blog\", \"params\":{\"account\":\"steemit\",\"start_entry_id\":0,\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_blog\", \"params\":{\"account\":\"alice\",\"start_entry_id\":0,\"limit\":50}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nfollow_api.get_blog_authors \nReturns a list of authors that have had their content reblogged on a given blog account.\nQuery Parameters JSON \n{\"blog_account\": \"\"}\n\n\nExpected Response JSON \n{\"blog_authors\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_blog_authors\", \"params\":{\"blog_account\":\"steemit\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_blog_authors\", \"params\":{\"blog_account\":\"alice\"}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nfollow_api.get_blog_entries \nReturns a list of blog entries for an account.\nQuery Parameters JSON \n{\"account\": \"\", \"start_entry_id\": 0, \"limit\": 500}\n\n\nExpected Response JSON \n{\"blog\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_blog_entries\", \"params\":{\"account\":\"steemit\",\"start_entry_id\":0,\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_blog_entries\", \"params\":{\"account\":\"alice\",\"start_entry_id\":0,\"limit\":50}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\nfollow_api.get_feed \nReturns a list of items in an account’s feed.\nQuery Parameters JSON \n{\"account\": \"\", \"start_entry_id\": 0, \"limit\": 500}\n\n\nExpected Response JSON \n{\"feed\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_feed\", \"params\":{\"account\":\"steemit\",\"start_entry_id\":0,\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_feed\", \"params\":{\"account\":\"alice\",\"start_entry_id\":1,\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\nfollow_api.get_feed_entries \nReturns a list of entries in an account’s feed.\nQuery Parameters JSON \n{\"account\": \"\", \"start_entry_id\": 0, \"limit\": 500}\n\n\nExpected Response JSON \n{\"feed\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_feed_entries\", \"params\":{\"account\":\"steemit\",\"start_entry_id\":0,\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_feed_entries\", \"params\":{\"account\":\"alice\",\"start_entry_id\":1,\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF9\n\n\n\n\nfollow_api.get_follow_count \nReturns the count of followers for an account.\nQuery Parameters JSON \n{\"account\": \"\"}\n\n\nExpected Response JSON \n{\n  \"account\": \"\",\n  \"follower_count\": 0,\n  \"following_count\": 0\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_follow_count\", \"params\":{\"account\":\"steemit\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_follow_count\", \"params\":{\"account\":\"alice\"}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF9\n\n\n\n\nfollow_api.get_followers \nReturns the list of followers for an account.\nQuery Parameters JSON \n{\n  \"account\": \"\",\n  \"start\": \"\",\n  \"type\": \"undefined\",\n  \"limit\": 1000\n}\n\n\nExpected Response JSON \n{\"followers\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_followers\", \"params\":{\"account\":\"steemit\",\"start\":null,\"type\":\"blog\",\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_followers\", \"params\":{\"account\":\"alice\",\"start\":null,\"type\":\"ignore\",\"limit\":100}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF9\n\n\n\n\nfollow_api.get_following \nReturns the list of accounts that are following an account.\nQuery Parameters JSON \n{\n  \"account\": \"\",\n  \"start\": \"\",\n  \"type\": \"undefined\",\n  \"limit\": 1000\n}\n\n\nExpected Response JSON \n{\"following\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_following\", \"params\":{\"account\":\"steemit\",\"start\":null,\"type\":\"blog\",\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_following\", \"params\":{\"account\":\"alice\",\"start\":null,\"type\":\"ignore\",\"limit\":100}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\nfollow_api.get_reblogged_by \nReturns a list of authors that have reblogged a post.\nQuery Parameters JSON \n{\"author\": \"\", \"permlink\": \"\"}\n\n\nExpected Response JSON \n{\"accounts\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_reblogged_by\", \"params\":{\"author\":\"steemit\",\"permlink\":\"firstpost\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"follow_api.get_reblogged_by\", \"params\":{\"author\":\"alice\",\"permlink\":\"a-post-by-alice\"}, \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-jsonrpc": {
							"id": "apidefinitions-jsonrpc",
							"title": "Jsonrpc",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsjsonrpc",
							"content": "Used to lookup information about the JSON RPC API. These AppBase API methods are still under development and subject to change.\n\n\n\n\n\n\njsonrpc.get_methods \nReturns a list of methods supported by the JSON RPC API.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"jsonrpc.get_methods\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\njsonrpc.get_signature \nReturns the signature information for a JSON RPC method including the arguments and expected response JSON.\nQuery Parameters JSON \n{\"method\": \"\"}\n\n\nExpected Response JSON \n{\"args\": null, \"ret\": null}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"jsonrpc.get_signature\", \"params\":{\"method\":\"jsonrpc.get_methods\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"jsonrpc.get_signature\", \"params\":{\"method\":\"jsonrpc.get_signature\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"jsonrpc.get_signature\", \"params\":{\"method\":\"condenser_api.get_dynamic_global_properties\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"jsonrpc.get_signature\", \"params\":{\"method\":\"database_api.get_dynamic_global_properties\"}, \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-market-history-api": {
							"id": "apidefinitions-market-history-api",
							"title": "Market History Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsmarket-history-api",
							"content": "Used to lookup market history information. These AppBase API methods are still under development and subject to change.\n\n\n\n\n\n\nmarket_history_api.get_market_history \nReturns the market history for the internal SBD:STEEM market.\nQuery Parameters JSON \n{\n  \"bucket_seconds\": 0,\n  \"start\": \"1970-01-01T00:00:00\",\n  \"end\": \"1970-01-01T00:00:00\"\n}\n\n\nExpected Response JSON \n{\"buckets\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_market_history\", \"params\":{\"bucket_seconds\":15,\"start\":\"2018-01-01T00:00:00\",\"end\":\"2018-01-02T00:00:00\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_market_history\", \"params\":{\"bucket_seconds\":60,\"start\":\"2018-01-01T00:00:00\",\"end\":\"2018-01-02T00:00:00\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_market_history\", \"params\":{\"bucket_seconds\":300,\"start\":\"2018-01-01T00:00:00\",\"end\":\"2018-01-02T00:00:00\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_market_history\", \"params\":{\"bucket_seconds\":3600,\"start\":\"2018-01-01T00:00:00\",\"end\":\"2018-01-02T00:00:00\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_market_history\", \"params\":{\"bucket_seconds\":86400,\"start\":\"2018-01-01T00:00:00\",\"end\":\"2018-01-02T00:00:00\"}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nmarket_history_api.get_market_history_buckets \nReturns the bucket seconds being tracked by the plugin.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\"bucket_sizes\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_market_history_buckets\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nmarket_history_api.get_order_book \nReturns the internal market order book.\nQuery Parameters JSON \n{\"limit\": 500}\n\n\nExpected Response JSON \n{\"bids\": [], \"asks\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_order_book\", \"params\":{\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_order_book\", \"params\":{\"limit\":50}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nmarket_history_api.get_recent_trades \nReturns the most recent trades for the internal SBD:STEEM market.\nQuery Parameters JSON \n{\"limit\": 1000}\n\n\nExpected Response JSON \n{\"trades\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_recent_trades\", \"params\":{\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_recent_trades\", \"params\":{\"limit\":500}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nmarket_history_api.get_ticker \nReturns the market ticker for the internal SBD:STEEM market.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\n  \"latest\": \"0.00000000000000000\",\n  \"lowest_ask\": \"0.00000000000000000\",\n  \"highest_bid\": \"0.00000000000000000\",\n  \"percent_change\": \"0.00000000000000000\",\n  \"steem_volume\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"sbd_volume\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000013\"\n  }\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_ticker\", \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nmarket_history_api.get_trade_history \nReturns the trade history for the internal SBD:STEEM market.\nQuery Parameters JSON \n{\n  \"start\": \"1970-01-01T00:00:00\",\n  \"end\": \"1970-01-01T00:00:00\",\n  \"limit\": 1000\n}\n\n\nExpected Response JSON \n{\"trades\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_trade_history\", \"params\":{\"start\":\"2018-01-01T00:00:00\",\"end\":\"2018-01-02T00:00:00\",\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nmarket_history_api.get_volume \nReturns the market volume for the past 24 hours.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\n  \"steem_volume\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"sbd_volume\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000013\"\n  }\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"market_history_api.get_volume\", \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-network-broadcast-api": {
							"id": "apidefinitions-network-broadcast-api",
							"title": "Network Broadcast Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionsnetwork-broadcast-api",
							"content": "Used to broadcast transactions and blocks. These AppBase API methods are\nstill under development and subject to change.\n\nAlso see: Blockchain Ops\n\n\n\n\n\n\nnetwork_broadcast_api.broadcast_block \nUsed to broadcast a block.\nQuery Parameters JSON \n{\n  \"block\": {\n    \"previous\": \"0000000000000000000000000000000000000000\",\n    \"timestamp\": \"1970-01-01T00:00:00\",\n    \"witness\": \"\",\n    \"transaction_merkle_root\": \"0000000000000000000000000000000000000000\",\n    \"extensions\": [],\n    \"witness_signature\": \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n    \"transactions\": []\n  }\n}\n\n\nExpected Response JSON \n{}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"network_broadcast_api.broadcast_block\", \"params\":{\"block\":{\"previous\":\"0000000000000000000000000000000000000000\",\"timestamp\":\"1970-01-01T00:00:00\",\"witness\":\"\",\"transaction_merkle_root\":\"0000000000000000000000000000000000000000\",\"extensions\":[],\"witness_signature\":\"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"transactions\":[]}}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nnetwork_broadcast_api.broadcast_transaction \nUsed to broadcast a transaction.\nQuery Parameters JSON \n{\n  \"trx\": {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  },\n  \"max_block_age\": -1\n}\n\n\nExpected Response JSON \n{}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"network_broadcast_api.broadcast_transaction\", \"params\":{\"trx\":{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[{\"type\":\"vote_operation\",\"value\":{\"voter\":\"steemit\",\"author\":\"alice\",\"permlink\":\"a-post-by-alice\",\"weight\":10000}}],\"extensions\":[],\"signatures\":[]},\"max_block_age\":50}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"network_broadcast_api.broadcast_transaction\", \"params\":{\"trx\":{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[{\"type\":\"pow_operation\",\"value\":{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}}],\"extensions\":[],\"signatures\":[]},\"max_block_age\":50}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\nnetwork_broadcast_api.broadcast_transaction_synchronous \nUsed to broadcast a transaction and waits for it to be processed synchronously.\nQuery Parameters JSON \n{\n  \"trx\": {\n    \"ref_block_num\": 0,\n    \"ref_block_prefix\": 0,\n    \"expiration\": \"1970-01-01T00:00:00\",\n    \"operations\": [],\n    \"extensions\": [],\n    \"signatures\": []\n  },\n  \"max_block_age\": -1\n}\n\n\nExpected Response JSON \n{\n  \"id\": \"0000000000000000000000000000000000000000\",\n  \"block_num\": 0,\n  \"trx_num\": 0,\n  \"expired\": false\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"network_broadcast_api.broadcast_transaction_synchronous\", \"params\":{\"trx\":{\"ref_block_num\":1097,\"ref_block_prefix\":2181793527,\"expiration\":\"2016-03-24T18:00:21\",\"operations\":[{\"type\":\"pow_operation\",\"value\":{\"worker_account\":\"cloop3\",\"block_id\":\"00000449f7860b82b4fbe2f317c670e9f01d6d9a\",\"nonce\":3899,\"work\":{\"worker\":\"STM7P5TDnA87Pj9T4mf6YHrhzjC1KbPZpNxLWCcVcHxNYXakpoT4F\",\"input\":\"ae8e7c677119d22385f8c48026fee7aad7bba693bf788d7f27047f40b47738c0\",\"signature\":\"1f38fe9a3f9989f84bd94aa5bbc88beaf09b67f825aa4450cf5105d111149ba6db560b582c7dbb026c7fc9c2eb5051815a72b17f6896ed59d3851d9a0f9883ca7a\",\"work\":\"000e7b209d58f2e64b36e9bf12b999c6c7af168cc3fc41eb7f8a4bf796c174c3\"},\"props\":{\"account_creation_fee\":{\"amount\":\"100000\",\"precision\":3,\"nai\":\"@@000000021\"},\"maximum_block_size\":131072,\"sbd_interest_rate\":1000}}}],\"extensions\":[],\"signatures\":[]}}, \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-tags-api": {
							"id": "apidefinitions-tags-api",
							"title": "Tags Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionstags-api",
							"content": "Used to lookup information about tags, posts, and discussions. These AppBase API methods are still under development and subject to change.\n\n\n\n\n\n\ntags_api.get_active_votes \nReturns all votes for the given post.\nQuery Parameters JSON \n{\"author\": \"\", \"permlink\": \"\"}\n\n\nExpected Response JSON \n{\"votes\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_active_votes\", \"params\":{\"author\":\"steemit\", \"permlink\":\"firstpost\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_active_votes\", \"params\":{\"author\":\"alice\", \"permlink\":\"a-post-by-alice\"}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ntags_api.get_comment_discussions_by_payout \nReturns a list of discussions based on payout.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_comment_discussions_by_payout\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_comment_discussions_by_payout\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_content_replies \nReturns a list of replies.\nQuery Parameters JSON \n{\"author\": \"\", \"permlink\": \"\"}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_content_replies\", \"params\":{\"author\":\"steemit\", \"permlink\":\"firstpost\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_content_replies\", \"params\":{\"author\":\"alice\", \"permlink\":\"a-post-by-alice\"}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussion \nReturns the discussion given an author and permlink.\nQuery Parameters JSON \n{\"author\": \"\", \"permlink\": \"\"}\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"author\": \"\",\n  \"permlink\": \"\",\n  \"category\": \"\",\n  \"parent_author\": \"\",\n  \"parent_permlink\": \"\",\n  \"title\": \"\",\n  \"body\": \"\",\n  \"json_metadata\": \"\",\n  \"last_update\": \"1970-01-01T00:00:00\",\n  \"created\": \"1970-01-01T00:00:00\",\n  \"active\": \"1970-01-01T00:00:00\",\n  \"last_payout\": \"1970-01-01T00:00:00\",\n  \"depth\": 0,\n  \"children\": 0,\n  \"net_rshares\": 0,\n  \"abs_rshares\": 0,\n  \"vote_rshares\": 0,\n  \"children_abs_rshares\": 0,\n  \"cashout_time\": \"1970-01-01T00:00:00\",\n  \"max_cashout_time\": \"1970-01-01T00:00:00\",\n  \"total_vote_weight\": 0,\n  \"reward_weight\": 0,\n  \"total_payout_value\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"curator_payout_value\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"author_rewards\": 0,\n  \"net_votes\": 0,\n  \"root_author\": \"\",\n  \"root_permlink\": \"\",\n  \"max_accepted_payout\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"percent_steem_dollars\": 0,\n  \"allow_replies\": false,\n  \"allow_votes\": false,\n  \"allow_curation_rewards\": false,\n  \"beneficiaries\": [],\n  \"url\": \"\",\n  \"root_title\": \"\",\n  \"pending_payout_value\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"total_pending_payout_value\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000021\"\n  },\n  \"active_votes\": [],\n  \"replies\": [],\n  \"author_reputation\": 0,\n  \"promoted\": {\n    \"amount\": \"0\",\n    \"precision\": 3,\n    \"nai\": \"@@000000013\"\n  },\n  \"body_length\": 0,\n  \"reblogged_by\": []\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussion\", \"params\":{\"author\":\"steemit\", \"permlink\":\"firstpost\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussion\", \"params\":{\"author\":\"alice\", \"permlink\":\"a-post-by-alice\"}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_active \nReturns a list of discussions based on active.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_active\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_active\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_author_before_date \nReturns a list of discussions based on author before date.\nQuery Parameters JSON \n{\n  \"author\": \"\",\n  \"start_permlink\": \"\",\n  \"before_date\": \"1970-01-01T00:00:00\",\n  \"limit\": 100\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_author_before_date\", \"params\":{\"author\":\"steemit\",\"start_permlink\":\"firstpost\",\"before_date\":\"2016-04-19T22:49:43\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_blog \nReturns a list of discussions by blog.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_blog\", \"params\":{\"tag\":\"steemit\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_blog\", \"params\":{\"tag\":\"alice\",\"limit\":10}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_cashout \nReturns a list of discussions by cashout.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_cashout\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_cashout\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_children \nReturns a list of discussions by children.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_children\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_children\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_comments \nReturns a list of discussions by comments.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_comments\", \"params\":{\"start_author\":\"steemit\",\"start_permlink\":\"firstpost\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_comments\", \"params\":{\"start_author\":\"alice\",\"start_permlink\":\"a-post-by-alice\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_created \nReturns a list of discussions by created.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_created\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_created\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF14\n\n\n\n\ntags_api.get_discussions_by_feed \nReturns a list of discussions by feed.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_feed\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_feed\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_hot \nReturns a list of discussions by hot.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_hot\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_hot\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF13\n\n\n\n\ntags_api.get_discussions_by_promoted \nReturns a list of discussions by promoted.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_promoted\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_promoted\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_trending \nReturns a list of discussions by trending.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_trending\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_trending\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_discussions_by_votes \nReturns a list of discussions by votes.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_votes\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_discussions_by_votes\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\nSince: HF17\n\n\n\n\ntags_api.get_post_discussions_by_payout \nReturns a list of post discussions by payout.\nQuery Parameters JSON \n{\n  \"tag\": \"\",\n  \"limit\": 0,\n  \"filter_tags\": [],\n  \"select_authors\": [],\n  \"select_tags\": [],\n  \"truncate_body\": 0\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_post_discussions_by_payout\", \"params\":{\"tag\":\"steem\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_post_discussions_by_payout\", \"params\":{\"tag\":\"photography\",\"limit\":10,\"truncate_body\":0}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_replies_by_last_update \nReturns a list of replies by last update.\nQuery Parameters JSON \n{\n  \"start_parent_author\": \"\",\n  \"start_permlink\": \"\",\n  \"limit\": 100\n}\n\n\nExpected Response JSON \n{\"discussions\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_replies_by_last_update\", \"params\":{\"start_parent_author\":\"steemit\",\"start_permlink\":\"firstpost\",\"limit\":1}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_tags_used_by_author \nReturns a list of tags used by an author.\nQuery Parameters JSON \n{\"author\": \"\"}\n\n\nExpected Response JSON \n{\"tags\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_tags_used_by_author\", \"params\":{\"author\":\"steemit\"}, \"id\":1}' https://api.steemit.com\n\n\n\n\n\n\n\n\n\n\ntags_api.get_trending_tags \nReturns the list of trending tags.\nQuery Parameters JSON \n{\"start_tag\": \"\", \"limit\": 100}\n\n\nExpected Response JSON \n{\"tags\": []}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_trending_tags\", \"params\":{\"start_tag\":null,\"limit\":100}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"tags_api.get_trending_tags\", \"params\":{\"start_tag\":\"steem\",\"limit\":10}, \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
				
					
						,
						
						"apidefinitions-witness-api": {
							"id": "apidefinitions-witness-api",
							"title": "Witness Api",
							"category": "apidefinitions",
							"description": "",
		  				"type": "",
							"url": "/#apidefinitionswitness-api",
							"content": "Used to query values related to the witness plugin. These AppBase API methods are still under development and subject to change.\n\n\n\n\n\n\nwitness_api.get_account_bandwidth \nReturns the available bandwidth of an account.  See: Forum/Market Bandwidth\nQuery Parameters JSON \n{\"account\": \"\", \"type\": \"post\"}\n\n\nExpected Response JSON \n{}\n\n\n\n\n\n\n\n\n\n\nwitness_api.get_reserve_ratio \nReturns the current reserve ratio.\nQuery Parameters JSON \n{}\n\n\nExpected Response JSON \n{\n  \"id\": 0,\n  \"average_block_size\": 0,\n  \"current_reserve_ratio\": 1,\n  \"max_virtual_bandwidth\": \"0\"\n}\n\n\n\nExample curl \n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"witness_api.get_account_bandwidth\", \"params\":{\"account\":\"steemit\",\"type\":\"forum\"}, \"id\":1}' https://api.steemit.com\n\n\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"witness_api.get_account_bandwidth\", \"params\":{\"account\":\"alice\",\"type\":\"market\"}, \"id\":1}' https://api.steemit.com"
						}
						
					
				
			
		
			
				
					
						,
						
						"community-developeradvocate": {
							"id": "community-developeradvocate",
							"title": "Sharing &amp; Help",
							"category": "community",
							"description": "",
		  				"type": "",
							"url": "/#communitydeveloperadvocate",
							"content": "Developer Advocate\n\nThe members of the Steemit Inc. development team are currently the main contributors to the Steem blockchain software. They oversee the open source Steem GitHub repository, and maintain many of the open source libraries that developers use.\n\nSteemit’s Developer Advocate is here to make the process of developing for the Steem platform as smooth as possible. If you have any comments, concerns, or suggestions about how to improve the experience of developing applications with the Steem blockchain - please reach out.\n\nThe D.A. receives a lot of emails, but will respond as quickly as possible.\n\n\n\nSteemDevs Chat - https://discord.gg/B29Bbng\n\nSteemDevs chat is a public Discord chat community where members of the Steem development community go to discuss Steem development, and other related topics.\nIt is a great place to go to ask questions, meet other developers that are working on Steem projects, share tips and code snippets, and discuss the items you are working on."
						}
						
					
				
			
				
					
						,
						
						"community-overview": {
							"id": "community-overview",
							"title": "Overview",
							"category": "community",
							"description": "",
		  				"type": "",
							"url": "/#communityoverview",
							"content": "The steem community is thriving with developer activity and projects to support\nour great blockchain steem.\n\nWhile we don’t officially endorse the following projects, below are growing community developer\nprojects which could be beneficial for your steem project."
						}
						
					
				
			
				
					
						,
						
						"community-resources": {
							"id": "community-resources",
							"title": "Resources",
							"category": "community",
							"description": "",
		  				"type": "",
							"url": "/#communityresources",
							"content": "Libraries, tools\n\nRadiator - https://github.com/inertia186/radiator\n\nRadiator is a Ruby API client to interact with the steem blockchain.\n\n\n\nSteemJS - https://github.com/svk31/steemjs-lib\n\nPure JavaScript Steem crypto library for node.js and browsers. Can be used to construct, sign and broadcast transactions in JavaScript.\n\n\n\nBeem - https://github.com/holgern/beem\n\nA python library to interact with the STEEM blockchain. It includes the CLI tool beempy.\n\n\n\nPiston-cli - https://github.com/xeroc/piston-cli\n\nThis python library is unmaintained! Swiss army knife for interacting with the STEEM blockchain.\n\n\n\nChainSync - https://github.com/aaroncox/chainsync\n\nA simple library to stream blocks and operations for digesting into other mediums.\n\n\n\nSteemIAPI - http://steem.esteem.ws/\n\nInteractive Steem API swagger, open-source script allows you to interact with blockchain.\n\n\n\nPHP Steem - https://github.com/lukestokes/php-steem-tools\n\nVarious tools and scripts written in PHP for exploring the STEEM blockchain.\n\n\n\nSteemJ - https://github.com/marvin-we/steem-java-api-wrapper\n\nAn API Wrapper for Steem written in Java\n\n\n\nGoSteem - https://github.com/go-steem/rpc\n\nGolang RPC client library for Steem\n\n\n\nSteemClientRS - https://github.com/cyberpunk-ventures/steem-client-rs\n\nClient library for Steem blockchain built with Rust\n\nServices and databases\n\nSteemSQL - http://www.steemsql.com/\n\nA private Microsoft SQL server database with Steem blockchain data, subscription based, allows you to do flexible queries and analyze blockchain data.\n\n\n\nSteem Data - https://github.com/SteemData\n\nSteemData is discontinued but open-source python project, it parses the STEEM blockchain for you, and provide the data as a fast and convenient MongoDB service. SteemData helps developers and researchers build better STEEM applications.\n\n\n\nSteemData-Ruby - https://github.com/steem-third-party/steem_data\n\nWrapper for accessing steemdata.com in a ruby application. It uses MongoID and ActiveModel to leverage all of the tools provided by those libraries.\n\n\n\neSync - https://github.com/eSteemApp/esync\n\neSync extracts Steem blockchain data and saves into Mongodb, written in Nodejs.\n\n\n\nGlasnost - https://github.com/cyberpunk-ventures/glasnost\n\nGlasnost is an GraphQL app server for Steem blockchain built with Elixir, Phoenix and Mnesia.\n\n\n\nSteemConnect\n\nMost people who will be implementing OAuth2 will want to find and utilize a library in the language of their choice. These libraries, while not necessarily built by Steemit, should support the SteemConnect API.\n\n\n\nSteemConnect SDK - https://github.com/steemit/steemconnect-sdk\n\nAn official javascript library for utilizing SteemConnect.\n\n\n\nsteem-connect-firebase-function - https://jakipatryk.github.io/steemconnect-firebase-functions/\n\nA TypeScript library that can help you build applications with SteemConnect and Firebase.\n\n\n\nSc2 SDK PHP - https://github.com/hernandev/sc2-sdk-php\n\nEasily integrate STEEM blockchain into your PHP applications, though SteemConnect.\n\n\n\nSocial Auth SteemConnect - https://pypi.python.org/pypi/social-auth-steemconnect/0.0.2\n\nPluggable authentication backend for python-social-auth, that allows authentication via SteemConnect (v2).\n\n\n\nsteemconnect-python-client - https://github.com/emre/steemconnect-python-client\n\nsteemconnect-python-client is a simple yet powerful library to interact with the Steemconnect.\n\n\n\nomniauth-steemconnect - https://rubygems.org/gems/omniauth-steemconnect/versions/0.1.0\n\nRuby Omniauth2 Strategy for SteemConnect.\n\n\n\nSwiftyConnect - https://github.com/caspernikus/SwiftyConnect\n\nSteemConnect Library for iOS / Swift.\n\n\n\nSteemConnect4j - https://github.com/hapramp/steemconnect4j\n\nSteemconnect SDK for Java.\n\n\n\nMany more projects and tools can be found here https://steemprojects.com and https://steemtools.com"
						}
						
					
				
			
		
			
		
			
				
					
						,
						
						"glossary-api": {
							"id": "glossary-api",
							"title": "API",
							"category": "glossary",
							"description": "Dictionary of API Terms",
		  				"type": "",
							"url": "/#glossaryapi",
							"content": ""
						}
						
					
				
			
				
					
						,
						
						"glossary-chain-basics": {
							"id": "glossary-chain-basics",
							"title": "Chain Basics",
							"category": "glossary",
							"description": "Dictionary of Chain Basic Terms",
		  				"type": "",
							"url": "/#glossarychain_basics",
							"content": "TermDefinition\n\t\n\n\t\n\t\tBlockchainDecentralized ledger and consensus protocol\n\t\n\n\t\n\t\tSteemName of the blockchain and platform"
						}
						
					
				
			
				
					
						,
						
						"glossary-governance": {
							"id": "glossary-governance",
							"title": "Governance",
							"category": "glossary",
							"description": "Dictionary of Governance Terms",
		  				"type": "",
							"url": "/#glossarygovernance",
							"content": ""
						}
						
					
				
			
				
					
						,
						
						"glossary-index": {
							"id": "glossary-index",
							"title": "Index",
							"category": "glossary",
							"description": "",
		  				"type": "",
							"url": "/#glossaryindex",
							"content": "Chain Basics\n\t\t\t   \t\n\t\t\t   \t\t\n\t\t\t\t\t   \tBlockchain\n\t\t\t\t\t    Decentralized ledger and consensus protocol\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tSteem\n\t\t\t\t\t    Name of the blockchain and platform\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tBandwidth\n\t\t\t\t\t    is the limit of data each account can send/use\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tVESTS\n\t\t\t\t\t    Vests is underlying token that STEEM is derived from, and are share in Steem Power\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tSTEEM\n\t\t\t\t\t    Currency of the blockchain, liquid version of Steem Power\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tSBD\n\t\t\t\t\t    Steem Backed Dollar, $1 worth of STEEM\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tSteem Power\n\t\t\t\t\t    Locked version of STEEM which gives account influence on the platform\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tTransaction\n\t\t\t\t\t    Operations/Activity/Write requests to the blockchain\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tBlock\n\t\t\t\t\t    Bundle of transactions to be included in blockchain\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tBlock Header\n\t\t\t\t\t    Information about block, root and witness who signed, etc.\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tPrice feed\n\t\t\t\t\t    Feed that is maintained by witnesses to ensure SBD/STEEM price stability\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tAccount\n\t\t\t\t\t    User account on Steem blockchain\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tAuthority\n\t\t\t\t\t    Each Account has multiple authority and keys to manager different permissions on the platform\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tOwner\n\t\t\t\t\t    Owner authority/permission of account\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tPublic Key\n\t\t\t\t\t    Public key of account's certain authority\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tPrivate Key\n\t\t\t\t\t    Private key to sign a transaction with account's authority, should be kept secret because it grants access to account\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tWif\n\t\t\t\t\t    Wallet Import Format/Private key, should be kept secret because it grants access to account\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tVote\n\t\t\t\t\t    Voting a content\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tReputation\n\t\t\t\t\t    Account's reputation on platform\n\t\t\t\t    \n\t\t\t    \n\t\t\t\t\n\t\t\t\n\t\t\t   \tGovernance\n\t\t\t   \t\n\t\t\t   \t\t\n\t\t\t\t\t   \tDPOS\n\t\t\t\t\t    Delegated Proof of Stake\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tNode\n\t\t\t\t\t    Servers running blockchain software\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tWitness\n\t\t\t\t\t    Witness is a position/role for the people who are chosen by community (delegate trust) to support platform and run consensus protocol to ensure security and validity of transactions/blocks on the blockchain\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tNode\n\t\t\t\t\t    Servers running blockchain software\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tHardfork\n\t\t\t\t\t    Process to release protocol/blockchain consensus upgrades\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tSoftfork\n\t\t\t\t\t    Process to release protocol/blockchain software improvements\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tWitness Vote\n\t\t\t\t\t    Voting/electing witnesses with account's stake\n\t\t\t\t    \n\t\t\t    \n\t\t\t\t\n\t\t\t\n\t\t\t   \tTransactions\n\t\t\t   \t\n\t\t\t   \t\t\n\t\t\t\t\t   \tTransaction\n\t\t\t\t\t    Operations submitted to the blockchain\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tPending Transaction\n\t\t\t\t\t    Transaction that is pending and to be included to the blockchain\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tTransaction Hex\n\t\t\t\t\t    Hash of the transaction\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tSignatures\n\t\t\t\t\t    Transaction signature signed by account with private key\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tBroadcast Transaction\n\t\t\t\t\t    Event where signed transaction is broadcasted to the network, so that witnesses could validate and include in block\n\t\t\t\t    \n\t\t\t    \n\t\t\t\t\n\t\t\t\n\t\t\t   \tAPI\n\t\t\t   \t\n\t\t\t   \t\t\n\t\t\t\t\t   \tTrending\n\t\t\t\t\t    Posts/Discussions that are highly valued by community with bigger time interval update\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tHot\n\t\t\t\t\t    Posts/Disccussions that are highly valued with shorter time interval update\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tFeed\n\t\t\t\t\t    Posts/Disccussions from followers of particular account\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tActive\n\t\t\t\t\t    Posts/Disscussions that are still actively being engaged\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tNew\n\t\t\t\t\t    Newly created posts\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tCashout\n\t\t\t\t\t    Posts which was paid out recently\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tPromoted\n\t\t\t\t\t    Posts which was promoted by burning SBD to get more visibility\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tPending Payout\n\t\t\t\t\t    Estimated pending payout for blog posts/comments\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tTags\n\t\t\t\t\t    Tags, categories, hashtags each post is assigned to.\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tTrending Tags\n\t\t\t\t\t    Mostly used tags\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tFollowing\n\t\t\t\t\t    Account that is being followed\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tState\n\t\t\t\t\t    State of blockchain for path - accounts/tags/filters/posts\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tDynamic Global Properties\n\t\t\t\t\t    Current blockchain global properties which is being in each block\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tMedian Price\n\t\t\t\t\t    Median Price feed provided by all witnesses\n\t\t\t\t    \n\t\t\t    \n\t\t\t\t\n\t\t\t\n\t\t\t   \tMarket\n\t\t\t   \t\n\t\t\t   \t\t\n\t\t\t\t\t   \tConversion Requests\n\t\t\t\t\t    Request submitted for Converting SBD to STEEM\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tOrder Book\n\t\t\t\t\t    Internal market order book to exchange SBDSTEEM\n\t\t\t\t    \n\t\t\t    \n\t\t\t   \t\t\n\t\t\t\t\t   \tSMT\n\t\t\t\t\t    Smart Media Tokens"
						}
						
					
				
			
				
					
						,
						
						"glossary-market": {
							"id": "glossary-market",
							"title": "Market",
							"category": "glossary",
							"description": "Dictionary of Market Terms",
		  				"type": "",
							"url": "/#glossarymarket",
							"content": ""
						}
						
					
				
			
				
					
						,
						
						"glossary-transactions": {
							"id": "glossary-transactions",
							"title": "Transactions",
							"category": "glossary",
							"description": "Dictionary of Transaction Terms",
		  				"type": "",
							"url": "/#glossarytransactions",
							"content": ""
						}
						
					
				
			
		
			
				
					
						,
						
						"introduction-welcome": {
							"id": "introduction-welcome",
							"title": "Welcome to Steem",
							"category": "introduction",
							"description": "",
		  				"type": "",
							"url": "/#introductionwelcome",
							"content": "Welcome to the Steem Developer Portal!\n\nThis site is designed to aid those interested in developing applications on the  Steem blockchain.\n\nIf you don’t know about Steem yet, visit steem.com.\n\nThe code for this site is on github. If you’d like to see a specific improvement \nyou can either submit a pull request or file an issue. Please follow our \ncontribution guidelines\n\nSite Resources\n\nThe quickstart section has some general information on working with nodes, and testnets.\n\nOur tutorials section will take you through the basics of interacting with Steem apis in Javascript, Python, and Ruby.\n\nMore detailed API specs are available in the APPBASE API section. Those apis are under development, so please read \nnotes at the top of each section.\n\nYou can find community resources, libraries, and more ‘human’ ways to get help and education in the communities section.\n\nThe glossary has Steem specific terms that will help you understand documentation, whitepapers, and the speech of other steemians."
						}
						
					
				
			
		
			
		
			
		
			
				
					
						,
						
						"quickstart-choose-library": {
							"id": "quickstart-choose-library",
							"title": "Choose Library",
							"category": "quickstart",
							"description": "",
		  				"type": "",
							"url": "/#quickstartchoose_library",
							"content": "Getting started to develop robust and feature rich Steem applications couldn’t be easier. Accessing steem data is easy from various options depending on your infrastructure and objectives.\n\nBuilding a picture discovery app is a breeze with the JavaScript library. There is also a Python library available, Steemit.com and SBDS services, as well as many community projects which could be beneficial for your steem project."
						}
						
					
				
			
				
					
						,
						
						"quickstart-steemd-nodes": {
							"id": "quickstart-steemd-nodes",
							"title": "steemd Nodes",
							"category": "quickstart",
							"description": "",
		  				"type": "",
							"url": "/#quickstartsteemd_nodes",
							"content": "Applications that interface directly with the Steem blockchain will need to connect to a steemd node. Developers may choose to use one of the public API nodes that are available, or run their own instance of a node.\n\nPublic Nodes\n\n\n  \n    \n      URL\n      Owner\n    \n  \n  \n    \n      gtg.steem.house:8090\n      @gtg\n    \n    \n      steemd.minnowsupportproject.org\n      @followbtcnews\n    \n    \n      steemd.privex.io\n      @privex\n    \n    \n      steemd.steemgigs.org\n      @steemgigs\n    \n    \n      steemd.steemit.com\n      @steemit\n    \n    \n      rpc.curiesteem.com\n      @curie\n    \n    \n      rpc.steemliberator.com\n      @netuoso\n    \n    \n      rpc.steemviz.com\n      @ausbitbank\n    \n  \n\n\nPrivate Nodes\n\nThe simplest way to get started is by deploying a pre-built dockerized container.\n\nDockerized p2p Node\n\nTo run a p2p node (ca. 2GB of memory is required at the moment):\n\nDockerized Full Node\n\nto run a node with all the data (e.g. for supporting a content website) that uses ca. 14GB of memory and growing:\n\nSyncing blockchain\n\nNormally syncing blockchain starts from very first, 0 genesis block. It might take long time to catch up with live network. Because it connectes to various p2p nodes in the Steem network and requests blocks from 0 to head block. It stores blocks in block log file and builds up the current state in the shared memory file. But there is a way to bootstrap syncing by using trusted block_log file. The block log is an external append only log of the blocks. It contains blocks that are only added to the log after they are irreversible because the log is append only.\n\nTrusted block log file helps to download blocks faster. Steemit Inc, provides public block log file which can be downloaded from here and there is also option from community witness @gtg which can be downloaded from here.\n\nBoth block_log files updated periodically, as of May 2018 uncompressed block_log file size ~110 GB. Docker container on stable branch of Steem source code has option to use USE_PUBLIC_BLOCKLOG=1 to download latest block log and start Steem node with replay.\n\nBlock log should be place in blockchain directory below data_dir and node should be started with --replay-blockchain to ensure block log is valid and continue to sync from the point of snapshot. Replay uses the downloaded block log file to build up the shared memory file up to the highest block stored in that snapshot and then continues with sync up to the head block.\n\nReplay helps to sync blockchain in much faster rate, but as blockchain grows in size replay might also take some time to verify blocks.\n\nThere is another trick which might help with faster sync/replay on smaller equipped servers:\n\nwhile :\ndo\n   dd if=blockchain/block_log iflag=nocache count=0\n   sleep 60\ndone\n\n\n\nAbove bash script drops block_log from the OS cache, leaving more memory free for backing the blockchain database. It might also help while running live, but measurement would be needed to determine this.\n\nFew other tricks that might help:\n\nFor Linux users, virtual memory writes dirty pages of the shared file out to disk more often than is optimal which results in steemd being slowed down by redundant IO operations. These settings are recommended to optimize reindex time.\n\necho    75 | sudo tee /proc/sys/vm/dirty_background_ratio\necho  1000 | sudo tee /proc/sys/vm/dirty_expire_centisecs\necho    80 | sudo tee /proc/sys/vm/dirty_ratio\necho 30000 | sudo tee /proc/sys/vm/dirty_writeback_centisecs\n\n\n\nAnother settings that can be changed in config.ini is flush - it is to specify a target number of blocks to process before flushing the chain database to disk. This is needed on Linux machines and a value of 100000 is recommended. It is not needed on OS X, but can be used if desired.\n\ndocker run \\\n    -d -p 2001:2001 -p 8090:8090 --name steemd-default \\\n    steemit/steem\n\ndocker logs -f steemd-default  # follow along\n\n\ndocker run \\\n    --env USE_WAY_TOO_MUCH_RAM=1 \\\n    -d -p 2001:2001 -p 8090:8090 --name steemd-full \\\n    steemit/steem\n\ndocker logs -f steemd-full"
						}
						
					
				
			
				
					
						,
						
						"quickstart-testnet": {
							"id": "quickstart-testnet",
							"title": "Steem Testnet",
							"category": "quickstart",
							"description": "",
		  				"type": "",
							"url": "/#quickstarttestnet",
							"content": "Steem blockchain software is written in C++ and in order to modify the source code you need some understanding of the C++ programming language. Each Steem node runs an instance of this software, so in order to test your changes, you will need to know how to install dependencies which can be found in the Steem repo. This also means that some knowledge of System administration is also required. There are multiple advantages of running a testnet, you can test your scripts or applications on a testnet without extra spam on the live network, which allows much more flexibility to try new things. Having access to a testnet also helps you to work on new features and possibly submit new or improved pull requests to official the Steem GitHub repository.\n\nRunning Testnet\n\nBy following official build steps and enabling the BUILD_STEEM_TESTNET flag during compilation, you should be able to run the Steem Testnet locally on your workstation and join the development testnet. Docker can also be used to get started quickly. Compilation generates the steemd executable which is the main daemon for the Steem network. Additional cli_wallet can also be compiled to test/connect to an instance of steemd and request some data from the network, but it is not necessary to run a node.\n\nThe development testnet requires a certain minimum set of hardware requirements, depending on the type of compile flags that have been enabled. Because it is a mirror of the live network, private keys are the same for accounts up to the point of the snapshot timestamp of the testnet.\n\nJoining/Running the development testnet requires around 10 GB for block log on an SSD and 8 GB RAM. The CPU requirements are the same.\n\nTestnet has the following parameters by default (as of this writing):\n\n\n  Initial supply (250 billion) - STEEM_INIT_SUPPLY 250,000,000,000\n  Max number of blocks to be produced - TESTNET_BLOCK_LIMIT 3,000,000\n  Address prefix, prefix on public addresses - STEEM_ADDRESS_PREFIX \"TST\"\n  Chain id name, used for chain id - STEEM_CHAIN_ID_NAME \"testnet\"\n  Chain id, unique id hash of chain - STEEM_CHAIN_ID (fc::sha256::hash(STEEM_CHAIN_ID_NAME))\n  Public key of genesis account - STEEM_INIT_PUBLIC_KEY_STR\n  Account creation fee - STEEM_MIN_ACCOUNT_CREATION_FEE 0\n\n\nThere are a number of other subtle changes that we don’t need to focus on right now.\n\nLive testnet\n\n\n  ChainID: 46d82ab7d8db682eb1959aed0ada039a6d49afa1602491f93dde9cac3e8e6c32\n  Address prefix: TST\n  API node: https://testnet.steemitdev.com\n\n\nAnyone can join the Live testnet and start testing their node and applications, become a witness, and provide API (RPC) node for public use.\n\nCustom Testnet\n\nIn order to create a custom testnet, separate from the development one, we need to modify a few parameters mentioned in the previous section.\n\nIn the file named steem/libraries/protocol/include/steem/protocol/config.hpp, we can see the first few lines dedicated to the Testnet section. The line starts with #ifdef IS_TEST_NET.\n\nLet’s say we want to create a custom testnet with an initial supply of 1,000,000 STEEM. We can change STEEM_INIT_SUPPLY 1,000,000 and by changing STEEM_CHAIN_ID_NAME \"testnet\", testnet to mytestnet we will automatically get a unique Chain ID for our testnet. The address prefix can be set to something like MTN and of course, we need to change the public and private keys to the genesis account. Note that the genesis account will receive the entire pre-mined supply of 1,000,000. That way, you can execute a setup script to fund any newly created accounts. Such a custom testnet will not have any additional hardware requirements to run.\n\nA minimum of 8GB RAM should be sufficient to run a custom testnet. Currently, Steem only has Linux and Mac compiling guides to build. A testnet can either be hosted locally, on a rented AWS, or dedicated bare metal servers so one can start testing functionality, explore different APIs, and start developing.\n\nOne more crucial point to modify is to change the number of witnesses required to accept hardforks for a custom testnet, by default it is set to 17, we can change it to 1 STEEM_HARDFORK_REQUIRED_WITNESSES 1 so that only one node instance would be sufficient and the network will be still functional and fast.\n\nAnother thing to note is that you can start a new chain with all previous hardforks already accepted, by changing the file named steem/blob/master/libraries/chain/database.cpp with the following function:\n\nvoid database::init_genesis( uint64_t init_supply ) inside try add this line:\n\nset_hardfork( 19, true );\n\nThis would mean that 19 hardforks have been accepted by witnesses and the new chain will start with all previous forks included.\n\nAfter these changes, all we have to do is compile the source code and get the steemd executable. And once we fire up the custom testnet we can start testing and experimenting.\n\nIf you want to port some data from Steem main network you can use Tinman, also developed by Steemit, to help with taking snapshots of the main network.\n\nCustom live testnet\n\n\n  ChainID: 79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673\n  Address prefix: STX\n  API node: https://testnet.steem.vc\n\n\nThe above testnet is powered by community member @almost-digital and doesn’t have a snapshot of the main network."
						}
						
					
				
			
		
			
				
					
						,
						
						"services-imagehoster": {
							"id": "services-imagehoster",
							"title": "ImageHoster",
							"category": "services",
							"description": "",
		  				"type": "",
							"url": "/#servicesimageHoster",
							"content": "Definition\n\nImagehoster is a Steem-powered image hosting and proxying service. Any image uploaded to, or proxied through, your Imagehoster has a copy stored within it. This means that the image continues to be available even if 3rd party sites go down or change their URLs. For as long as your instance of imagehoster is running the image will be available, anytime you need it.\n\nDetaied information on Imagehoster can be found in its repository\n\nThe API\n\nBelow are examples of how to process images with the API\n\n\n  Upload an image\n  Fetch an uploaded image\n  Proxy and resize an image\n  Get user avatar image\n  Signing uploads\n  How to run\n\n\n1. Upload an image \n\nPOST /&lt;username&gt;/&lt;signature&gt;\n\nThis returns a JSON object container the URL to the uploaded image, ex:\n\n{\n    \"url\": \"https://images.example.com/DQmZi174Xz96UrRVBMNRHb6A2FfU3z1HRPwPPQCgSMgdiUT/test.jpg\"\n}\n\n\n\nFor this to succeed it requires a signature from a Steem account in good standing.\n\n2. Fetch an uploaded image \n\nGET /&lt;image_hash&gt;/&lt;filename&gt;\n\nThis downloads a previously uploaded image.\n\n&lt;filename&gt; is optional but can be provided to help users and applications understand the content type (Content-Type header will still always reflect actual image type)\n\n3. Proxy and resize an image \n\nGET /&lt;width&gt;x&lt;hight&gt;/&lt;image_url&gt;\n\nThis downloads and serves the provided image_url. Something to note is that a copy will be taken of the image and will be served on subsequent requests, so even if the upstream is removed or changes, you will still get the original from the proxy endpoint.\n\n&lt;width&gt; and &lt;height&gt; can be set to 0 to preserve the image’s dimensions, if they are &gt;0 the image will be aspect resized (down-sample only) to fit.\n\n4. Get user avatar image \n\nGET /u/&lt;username&gt;/avatar/&lt;size&gt;\n\nThis presents the avatar for username. If no avatar is set, a default image will be served. This default is set in the service config.\n\nThe sizes are:\n\n  small - 64x64\n  medium - 128x128\n  large - 512x512\n\n\nThe avatars follow the same sizing rules as proxied images, so you not guaranteed to get a square image, just an image fitting inside of the size square\n\n5. Signing uploads \n\nUploads also require a signature made by a Steem account’s posting authority. The account has to also be above a certain (service configurable) reputation threshold.\n\nCreating a signature for node.js and with dsteem:\n\nconst dsteem = require('dsteem')\nconst crypto = require('crypto')\nconst fs = require('fs')\n\nconst [wif, file] = process.argv.slice(2)\n\nif (!wif || !file) {\n    process.stderr.write(`Usage: ./sign.js &lt;posting_wif&gt; &lt;file&gt;\\n`)\n    process.exit(1)\n}\n\nconst data = fs.readFileSync(file)\nconst key = dsteem.PrivateKey.fromString(wif)\nconst imageHash = crypto.createHash('sha256')\n    .update('ImageSigningChallenge')\n    .update(data)\n    .digest()\n\nprocess.stdout.write(key.sign(imageHash).toString() + '\\n')\n\n\n\n6. How to run \n\nThis imagehoster demo must be run through linux due to a dependency on the make commandline.\nYou will also require node.js and yarn to run\n\n\n  \n    git clone https://github.com/steemit/imagehoster\n  \n  \n    Run make devserver\n  \n\n\nThis will pull in all dependencies and spin up a hot-reloading development server. From there the HTTP methods can be used to alter the image loaded from the &lt;./test&gt; module.\n\n\n  Run make lint to load the autolinter.\n  Run make test to run the unit tests for the active functions.\n\n\nDefault configuration variables are in &lt;./config/defailt.toml&gt; and can be overridden by environment variables as definded in &lt;./config/custom-enfironment-variables.toml&gt;\n\nThe load order for the config files are: env vars &gt; config/$NODE_ENV.toml &gt; config/default.toml"
						}
						
					
				
			
				
					
						,
						
						"services-jussi": {
							"id": "services-jussi",
							"title": "jussi",
							"category": "services",
							"description": "A reverse proxy that forwards json-rpc requests.",
		  				"type": "",
							"url": "/#servicesjussi",
							"content": "Jussi is a custom-built caching layer for use with steemd and other various services (such as SBDS).\n\nThe purpose of this document is to help developers and node operators set up their own jussi node within a docker container.\n\nIntro\n\nJussi is a reverse proxy that is situation between the API client and the steemd server.  It allows node operators to route an API call to nodes that are optimized for the particular call, as if they are all hosted from the same place.\n\nSections\n\n\n  Installation\n  Adding Upstreams\n  Benefits of jussi\n    \n      TTL\n      json-rpc batch\n    \n  \n  Footnotes\n\n\nInstallation\n\nTo run jussi locally:\n\ngit clone https://github.com/steemit/jussi.git\ncd jussi\ndocker build -t=\"$USER/jussi:$(git rev-parse --abbrev-ref HEAD)\" .\ndocker run -itp 9000:8080 \"$USER/jussi:$(git rev-parse --abbrev-ref HEAD)\"\n\n\n\n\njussi in a docker container as seen from Kitematic for macOS.\n\nTry out your local configuration:\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[8675309], \"id\":1}' http://localhost:9000\n\n\n\nSee: Running Condenser, Jussi and a new service locally + adding feature flags to Condenser\n\n\n\nAdding Upstreams\n\nThe default DEV_config.json is:\n\n{\n   \"limits\":{\"blacklist_accounts\":[\"non-steemit\"]},\n   \"upstreams\":[\n      {\n         \"name\":\"steemd\",\n         \"translate_to_appbase\":false,\n         \"urls\":[[\"steemd\", \"https://steemd.steemitdev.com\"]],\n         \"ttls\":[\n            [\"steemd\", 3],\n            [\"steemd.login_api\", -1],\n            [\"steemd.network_broadcast_api\", -1],\n            [\"steemd.follow_api\", 10],\n            [\"steemd.market_history_api\", 1],\n            [\"steemd.database_api\", 3],\n            [\"steemd.database_api.get_block\", -2],\n            [\"steemd.database_api.get_block_header\", -2],\n            [\"steemd.database_api.get_content\", 1],\n            [\"steemd.database_api.get_state\", 1],\n            [\"steemd.database_api.get_state.params=['/trending']\", 30],\n            [\"steemd.database_api.get_state.params=['trending']\", 30],\n            [\"steemd.database_api.get_state.params=['/hot']\", 30],\n            [\"steemd.database_api.get_state.params=['/welcome']\", 30],\n            [\"steemd.database_api.get_state.params=['/promoted']\", 30],\n            [\"steemd.database_api.get_state.params=['/created']\", 10],\n            [\"steemd.database_api.get_dynamic_global_properties\", 1]\n         ],\n         \"timeouts\":[\n            [\"steemd\", 5],\n            [\"steemd.network_broadcast_api\", 0]\n         ]\n      },\n      {\n         \"name\":\"appbase\",\n         \"urls\":[[\"appbase\", \"https://steemd.steemitdev.com\"]],\n         \"ttls\":[\n            [\"appbase\", -2],\n            [\"appbase.block_api\", -2],\n            [\"appbase.database_api\", 1]\n         ],\n         \"timeouts\":[\n            [\"appbase\", 3],\n            [\"appbase.chain_api.push_block\", 0],\n            [\"appbase.chain_api.push_transaction\", 0],\n            [\"appbase.network_broadcast_api\", 0],\n            [\"appbase.condenser_api.broadcast_block\", 0],\n            [\"appbase.condenser_api.broadcast_transaction\", 0],\n            [\"appbase.condenser_api.broadcast_transaction_synchronous\", 0]\n         ]\n      }\n   ]\n}\n\n\n\nUpstreams can be added to the upstreams array:\n\n{\n  \"name\": \"foo\",\n  \"urls\": [[\"foo\", \"https://foo.host.name\"]],\n  \"ttls\": [[\"foo\", 3]],\n  \"timeouts\": [[\"foo\", 5]]\n}\n\n\n\nOnce the above upstream is added to the local config and docker has been built, the following curl will work:\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"foo.bar\", \"params\":[\"baz\"], \"id\":1}' http://localhost:9000\n\n\n\nBenefits of jussi\n\nTime To Live\n\nJussi can be configured with various TTL (Time To Live) schemes. A TTL is an integer value in seconds.  Integers equal to or less than 0 have special meaning.  A reasonable set of defaults would be:\n\n\n  \n    \n      Upstream\n      API\n      Method\n      Parameters\n      TTL (seconds)\n    \n  \n  \n    \n      steemd\n      login_api\n      all\n      all\n      -1\n    \n    \n      steemd\n      network_broadcast_api\n      all\n      all\n      -1\n    \n    \n      steemd\n      follow_api\n      all\n      all\n      10\n    \n    \n      steemd\n      market_history_api\n      all\n      all\n      1\n    \n    \n      steemd\n      database_api\n      all\n      all\n      3\n    \n    \n      steemd\n      database_api\n      get_block\n      all\n      -2\n    \n    \n      steemd\n      database_api\n      get_block_header\n      all\n      -2\n    \n    \n      steemd\n      database_api\n      get_content\n      all\n      1\n    \n    \n      steemd\n      database_api\n      get_state\n      all\n      1\n    \n    \n      steemd\n      database_api\n      get_state\n      '/trending'\n      30\n    \n    \n      steemd\n      database_api\n      get_state\n      'trending'\n      30\n    \n    \n      steemd\n      database_api\n      get_state\n      '/hot'\n      30\n    \n    \n      steemd\n      database_api\n      get_state\n      '/welcome'\n      30\n    \n    \n      steemd\n      database_api\n      get_state\n      '/promoted'\n      30\n    \n    \n      steemd\n      database_api\n      get_state\n      '/created'\n      10\n    \n    \n      steemd\n      database_api\n      get_dynamic_global_properties\n      all\n      1\n    \n    \n      overseer\n      all\n      all\n      all\n      5\n    \n    \n      conveyor\n      all\n      all\n      all\n      -1\n    \n    \n      sbds\n      all\n      all\n      all\n      3\n    \n    \n      hivemind\n      all\n      all\n      all\n      3\n    \n    \n      yo\n      all\n      all\n      all\n      3\n    \n  \n\n\nIn this case, requests for login_api and network_broadcast_api have a TTL of -1, which means requests with those namespaces are not cached, whereas follow_api request have a TTL of 10 seconds.\n\nSome methods and parameters have their own TTL that overrides the general default, like database_api.get_block, which overrides database_api.*.\n\nTime to Live Special Meaning\n\n\n  0 won’t expire\n  -1 won’t be cached\n  -2 will be cached without expiration only if it is irreversible in terms of blockchain consensus\n\n\nIf you have a local copy of jussi (see: Installation), you can change these defaults by modifying DEV_config.json.\n\njson-rpc batch\n\nNormally, a request is made with a JSON Object ({}).  But jussi also supports batch requests, which is constructed with a JSON Array of Objects ([{}]).\n\nFor example, this would be a typical, non-batched JSON Object request that asks for a single block:\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[1], \"id\":1}' https://api.steemit.com\n\n\n\n{\n   \"id\":1,\n   \"jsonrpc\":\"2.0\",\n   \"result\":{\n      \"previous\":\"0000000000000000000000000000000000000000\",\n      \"timestamp\":\"2016-03-24T16:05:00\",\n      \"witness\":\"initminer\",\n      \"transaction_merkle_root\":\"0000000000000000000000000000000000000000\",\n      \"extensions\":[\n\n      ],\n      \"witness_signature\":\"204f8ad56a8f5cf722a02b035a61b500aa59b9519b2c33c77a80c0a714680a5a5a7a340d909d19996613c5e4ae92146b9add8a7a663eef37d837ef881477313043\",\n      \"transactions\":[\n\n      ],\n      \"block_id\":\"0000000109833ce528d5bbfb3f6225b39ee10086\",\n      \"signing_key\":\"STM8GC13uCZbP44HzMLV6zPZGwVQ8Nt4Kji8PapsPiNq1BK153XTX\",\n      \"transaction_ids\":[\n\n      ]\n   }\n}\n\n\n\nTo request more than one block using the batch construct, wrap each call in a JSON Array, that asks for two blocks in one request:\n\ncurl -s --data '[{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[1], \"id\":1},{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[2], \"id\":2}]' https://api.steemit.com\n\n\n\n[\n   {\n      \"id\":1,\n      \"jsonrpc\":\"2.0\",\n      \"result\":{\n         \"previous\":\"0000000000000000000000000000000000000000\",\n         \"timestamp\":\"2016-03-24T16:05:00\",\n         \"witness\":\"initminer\",\n         \"transaction_merkle_root\":\"0000000000000000000000000000000000000000\",\n         \"extensions\":[\n\n         ],\n         \"witness_signature\":\"204f8ad56a8f5cf722a02b035a61b500aa59b9519b2c33c77a80c0a714680a5a5a7a340d909d19996613c5e4ae92146b9add8a7a663eef37d837ef881477313043\",\n         \"transactions\":[\n\n         ],\n         \"block_id\":\"0000000109833ce528d5bbfb3f6225b39ee10086\",\n         \"signing_key\":\"STM8GC13uCZbP44HzMLV6zPZGwVQ8Nt4Kji8PapsPiNq1BK153XTX\",\n         \"transaction_ids\":[\n\n         ]\n      }\n   },\n   {\n      \"id\":2,\n      \"jsonrpc\":\"2.0\",\n      \"result\":{\n         \"previous\":\"0000000109833ce528d5bbfb3f6225b39ee10086\",\n         \"timestamp\":\"2016-03-24T16:05:36\",\n         \"witness\":\"initminer\",\n         \"transaction_merkle_root\":\"0000000000000000000000000000000000000000\",\n         \"extensions\":[\n\n         ],\n         \"witness_signature\":\"1f3e85ab301a600f391f11e859240f090a9404f8ebf0bf98df58eb17f455156e2d16e1dcfc621acb3a7acbedc86b6d2560fdd87ce5709e80fa333a2bbb92966df3\",\n         \"transactions\":[\n\n         ],\n         \"block_id\":\"00000002ed04e3c3def0238f693931ee7eebbdf1\",\n         \"signing_key\":\"STM8GC13uCZbP44HzMLV6zPZGwVQ8Nt4Kji8PapsPiNq1BK153XTX\",\n         \"transaction_ids\":[\n\n         ]\n      }\n   }\n]\n\n\n\nError responses are returned in the JSON Array response as well.  Notice the \"WRONG\" parameter in the second element.  The first block is returned as expected, the second one generates an error.\n\ncurl -s --data '[{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[1], \"id\":1},{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[\"WRONG\"], \"id\":2}]' https://api.steemit.com\n\n\n\n[\n   {\n      \"jsonrpc\":\"2.0\",\n      \"result\":{\n         \"previous\":\"0000000000000000000000000000000000000000\",\n         \"timestamp\":\"2016-03-24T16:05:00\",\n         \"witness\":\"initminer\",\n         \"transaction_merkle_root\":\"0000000000000000000000000000000000000000\",\n         \"extensions\":[\n\n         ],\n         \"witness_signature\":\"204f8ad56a8f5cf722a02b035a61b500aa59b9519b2c33c77a80c0a714680a5a5a7a340d909d19996613c5e4ae92146b9add8a7a663eef37d837ef881477313043\",\n         \"transactions\":[\n\n         ],\n         \"block_id\":\"0000000109833ce528d5bbfb3f6225b39ee10086\",\n         \"signing_key\":\"STM8GC13uCZbP44HzMLV6zPZGwVQ8Nt4Kji8PapsPiNq1BK153XTX\",\n         \"transaction_ids\":[\n\n         ]\n      },\n      \"id\":1\n   },\n   {\n      \"jsonrpc\":\"2.0\",\n      \"error\":{\n         \"code\":-32000,\n         \"message\":\"Parse Error:Couldn't parse uint64_t\",\n         \"data\":{\n            \"code\":4,\n            \"name\":\"parse_error_exception\",\n            \"message\":\"Parse Error\",\n            \"stack\":[\n               {\n                  \"context\":{\n                     \"level\":\"error\",\n                     \"file\":\"string.cpp\",\n                     \"line\":113,\n                     \"method\":\"to_uint64\",\n                     \"hostname\":\"\",\n                     \"timestamp\":\"2018-05-21T18:02:41\"\n                  },\n                  \"format\":\"Couldn't parse uint64_t\",\n                  \"data\":{\n\n                  }\n               },\n               {\n                  \"context\":{\n                     \"level\":\"warn\",\n                     \"file\":\"string.cpp\",\n                     \"line\":116,\n                     \"method\":\"to_uint64\",\n                     \"hostname\":\"\",\n                     \"timestamp\":\"2018-05-21T18:02:41\"\n                  },\n                  \"format\":\"\",\n                  \"data\":{\n                     \"i\":\"WRONG\"\n                  }\n               },\n               {\n                  \"context\":{\n                     \"level\":\"warn\",\n                     \"file\":\"variant.cpp\",\n                     \"line\":405,\n                     \"method\":\"as_uint64\",\n                     \"hostname\":\"\",\n                     \"timestamp\":\"2018-05-21T18:02:41\"\n                  },\n                  \"format\":\"\",\n                  \"data\":{\n                     \"*this\":\"WRONG\"\n                  }\n               }\n            ]\n         }\n      },\n      \"id\":2\n   }\n]\n\n\n\nFootnotes\n\n\n  Batch requests are limited to a maximum of 50 request elements.\n    \n      Also see: json-rpc batch specification\n    \n  \n  Repository: github.com/steemit/jussi\n\n\n\n\nLatin\n\n\n  jussi\n\nnoun\n\ndeclension: 2nd declension\ngender: neuter\n\nDefinitions:\n  1. order, command, decree, ordinance, law"
						}
						
					
				
			
				
					
						,
						
						"services-sbds": {
							"id": "services-sbds",
							"title": "SBDS",
							"category": "services",
							"description": "",
		  				"type": "",
							"url": "/#servicessbds",
							"content": "sbds is a tool for easily querying the data of the Steem Blockchain.\n\nWhile providing direct interfaces to several pluggable storage architectures that may be used for querying the blockchain, sbds may also be used as a lower level API upon which other applications can be built.\n\nDocker Hub\n\ndocker run -d steemit/sbds\n\n\n\nPython 3\npip3 install -e git+git@github.com:steemit/sbds.git#egg=sbds\n\n\n\nExamples\n\nStream blocks 1 to 3450000 from our dev S3 bucket\nsbds checkpoints get-blocks s3://steemit-dev-sbds-checkpoints/gzipped --start 1 --end 3450000\n\n\n\nStream blocks 8000000 to the last block from your local copy of our S3 bucket\nsbds checkpoints get-blocks /home/ubuntu/checkpoints/gzipped --start 8000000\n\n\n\nStream all blocks from your local copy of our S3 bucket\n\nsbds checkpoints get-blocks /home/ubuntu/checkpoints/gzipped\n\n\n\nRoutes\n\nComing soon."
						}
						
					
				
			
				
					
						,
						
						"services-steemconnect": {
							"id": "services-steemconnect",
							"title": "SteemConnect",
							"category": "services",
							"description": "",
		  				"type": "",
							"url": "/#servicessteemconnect",
							"content": "A Look at the Why’s and How’s of SteemConnect\n\nUseful Links\n\n\n  SteemConnect Repo\n  Community Resources\n\n\nWhy SteemConnect was implemented\n\nThe goal of SteemConnect is to provide a safe way of connecting to the blockchain via 3rd party apps without compromising the security of your private keys and passwords. It’s a simple identity layer built on top of the blockchain allowing users safe access and developers the freedom of not having to handle the authentication system, i.e. managing users’ private keys and encryption. This means that devs won’t have to opensource their projects in order to gain user trust. When connecting to apps in this manner, neither SteemConnect nor the authorised app store the private keys as the posting key is incrypted on your cookie.\n\nHow SteemConnect is implemented\n\nSteemConnect works by granting an access token to the requesting app once the application has been approved.\nA full tutorial on how to set up an application, request authorisation and grant access can be found HERE\n\nSteem Authorisation and OAuth 2\n\nThe OAuth protocol allows third party apps to grant limited access to an HTTP service, either on behalf of a resource owner or by allowing the app to obtain access on its own behalf. The authorisation is provided without the private key or password of the user being shared with the third party.\nSimplified, the process includes the following steps:\n\n\n  The user is presented with an authorisation link that requests a token from the API\n  The user has to log in to the service to verify their identity whereupon they will be prompted to authorise the application\n  The user is redirected to the application redirect URI along with the access token\n\n\nOnce the application has an access token, it may use the token to access the user’s account via the API, limited to the scope of access, until the token expires or is revoked.\nA full breakdown of OAuth2 and how it applies to SteemIt and SteemConnect can be found HERE\n\nFor additional material you can refer to the original steemit blog post by busy.org"
						}
						
					
				
			
				
					
						,
						
						"services-steemit": {
							"id": "services-steemit",
							"title": "Steemit.com",
							"category": "services",
							"description": "",
		  				"type": "",
							"url": "/#servicessteemit",
							"content": "steemit.com endpoints\n\nSteemit.com offers a few endpoints for getting common data. User profile and post JSON data is very convenient and simple by appending .json\nto your request.\n\nGetting a particular user profile JSON:\n\nhttps://steemit.com/@curie.json\n\n\n\nUser object\n{\n   \"user\":{\n      \"id\":81544,\n      \"name\":\"curie\",\n      \"owner\":{\n         \"weight_threshold\":1,\n         \"account_auths\":[],\n         \"key_auths\":[[\"STM69WGR1yhUdKrnzwQLDPnXrW9kaAERwHze8Uvtw2ecgRqCEjWxT\", 1]]\n      },\n      \"active\":{\n         \"weight_threshold\":1,\n         \"account_auths\":[],\n         \"key_auths\":[[\"STM5GAbbS84ViMEouJL3LKcM8VZzPejn68AfPaYaLZZDdmy98kwU5\", 1]]\n      },\n      \"posting\":{\n         \"weight_threshold\":1,\n         \"account_auths\":[[\"steemauto\", 1]],\n         \"key_auths\":[[\"STM5cmuKw6EPkZWeVNXcZorKtattZTX5wSopcRb4xNe6VhRKjETgv\", 1]]\n      },\n      \"memo_key\":\"STM7ZBi61xYz1b9STE1PHcAraPXJbvafzge3AcPjcfeq4XkKtM2At\",\n      \"json_metadata\":{\n         \"profile\":{\n            \"profile_image\":\"https://i.imgur.com/Mjewc66.jpg\",\n            \"name\":\"Curie\",\n            \"about\":\"Discovering exceptional content. \",\n            \"location\":\"Worldwide\",\n            \"website\":\"http://curiesteem.com\"\n         }\n      },\n      \"proxy\":\"\",\n      \"last_owner_update\":\"1970-01-01T00:00:00\",\n      \"last_account_update\":\"2018-02-28T14:21:24\",\n      \"created\":\"2016-09-02T10:44:24\",\n      \"mined\":false,\n      \"recovery_account\":\"anonsteem\",\n      \"last_account_recovery\":\"1970-01-01T00:00:00\",\n      \"reset_account\":\"null\",\n      \"comment_count\":0,\n      \"lifetime_vote_count\":0,\n      \"post_count\":1042,\n      \"can_vote\":true,\n      \"voting_power\":8927,\n      \"last_vote_time\":\"2018-06-21T19:42:33\",\n      \"balance\":\"24.519 STEEM\",\n      \"savings_balance\":\"0.000 STEEM\",\n      \"sbd_balance\":\"36.736 SBD\",\n      \"sbd_seconds\":\"11732264931\",\n      \"sbd_seconds_last_update\":\"2018-06-21T19:35:00\",\n      \"sbd_last_interest_payment\":\"2018-06-15T14:05:03\",\n      \"savings_sbd_balance\":\"0.000 SBD\",\n      \"savings_sbd_seconds\":\"0\",\n      \"savings_sbd_seconds_last_update\":\"1970-01-01T00:00:00\",\n      \"savings_sbd_last_interest_payment\":\"1970-01-01T00:00:00\",\n      \"savings_withdraw_requests\":0,\n      \"reward_sbd_balance\":\"0.000 SBD\",\n      \"reward_steem_balance\":\"0.000 STEEM\",\n      \"reward_vesting_balance\":\"481.354811 VESTS\",\n      \"reward_vesting_steem\":\"0.237 STEEM\",\n      \"vesting_shares\":\"128367480.795804 VESTS\",\n      \"delegated_vesting_shares\":\"0.000000 VESTS\",\n      \"received_vesting_shares\":\"17069919.621493 VESTS\",\n      \"vesting_withdraw_rate\":\"9672265.370398 VESTS\",\n      \"next_vesting_withdrawal\":\"2018-06-24T14:01:51\",\n      \"withdrawn\":0,\n      \"to_withdraw\":\"125739449815180\",\n      \"withdraw_routes\":0,\n      \"curation_rewards\":79730650,\n      \"posting_rewards\":168964559,\n      \"proxied_vsf_votes\":[\"1753316906111\", 0, 0, 0],\n      \"witnesses_voted_for\":1,\n      \"last_post\":\"2018-06-21T18:06:57\",\n      \"last_root_post\":\"2018-06-19T13:16:15\",\n      \"average_bandwidth\":\"540385456623\",\n      \"lifetime_bandwidth\":\"33717478000000\",\n      \"last_bandwidth_update\":\"2018-06-21T19:42:33\",\n      \"average_market_bandwidth\":\"83841450748\",\n      \"lifetime_market_bandwidth\":\"8042800000000\",\n      \"last_market_bandwidth_update\":\"2018-06-19T04:21:42\",\n      \"vesting_balance\":\"0.000 STEEM\",\n      \"reputation\":\"418378051905700\",\n      \"transfer_history\":[],\n      \"market_history\":[],\n      \"post_history\":[],\n      \"vote_history\":[],\n      \"other_history\":[],\n      \"witness_votes\":[\"curie\"],\n      \"tags_usage\":[],\n      \"guest_bloggers\":[]\n   },\n   \"status\":\"200\"\n}\n\n\n\nGetting a particular post JSON:\n\nhttps://steemit.com/curation/@curie/the-daily-curie-12-13-feb-2017.json\n\n\n\nPost object\n{\n   \"post\":{\n      \"id\":1720643,\n      \"author\":\"curie\",\n      \"permlink\":\"the-daily-curie-08-09-jan-2017\",\n      \"category\":\"curation\",\n      \"parent_author\":\"\",\n      \"parent_permlink\":\"curation\",\n      \"title\":\"The Daily Curie (08-09 Jan 2017)\",\n      \"body\":\"&lt;center&gt;https://s29.postimg.org/dgtsfe7if/curie2.png&lt;/center&gt;\\n## Introduction\\n[Curie](https://steemit.com/steemit/@donkeypong/announcing-project-curie-bringing-rewards-and-recognition-to-steemit-s-undiscovered-and-emerging-authors)  is a commu ...\",\n      \"last_update\":\"2017-01-09T12:20:15\",\n      \"created\":\"2017-01-09T12:20:15\",\n      \"active\":\"2017-01-11T22:44:57\",\n      \"last_payout\":\"2017-02-09T14:40:54\",\n      \"depth\":0,\n      \"children\":36,\n      \"children_rshares2\":\"0\",\n      \"net_rshares\":0,\n      \"abs_rshares\":0,\n      \"vote_rshares\":0,\n      \"children_abs_rshares\":0,\n      \"cashout_time\":\"1969-12-31T23:59:59\",\n      \"max_cashout_time\":\"1969-12-31T23:59:59\",\n      \"total_vote_weight\":0,\n      \"reward_weight\":10000,\n      \"total_payout_value\":\"0.000 SBD\",\n      \"curator_payout_value\":\"0.000 SBD\",\n      \"author_rewards\":0,\n      \"net_votes\":519,\n      \"root_comment\":1720643,\n      \"mode\":\"archived\",\n      \"max_accepted_payout\":\"0.000 SBD\",\n      \"percent_steem_dollars\":10000,\n      \"allow_replies\":true,\n      \"allow_votes\":true,\n      \"allow_curation_rewards\":true,\n      \"url\":\"/curation/@curie/the-daily-curie-08-09-jan-2017\",\n      \"root_title\":\"The Daily Curie (08-09 Jan 2017)\",\n      \"pending_payout_value\":\"0.000 SBD\",\n      \"total_pending_payout_value\":\"0.000 SBD\"\n   }\n}"
						}
						
					
				
			
		
			
				
					
						,
						
						"testnet-index": {
							"id": "testnet-index",
							"title": "Steem Testnet",
							"category": "testnet",
							"description": "",
		  				"type": "",
							"url": "/#testnetindex",
							"content": "Steem blockchain software is written in C++ and in order to modify the source code you need some understanding of the C++ programming language. Each Steem node runs an instance of this software, so in order to test your changes, you will need to know how to install dependencies which can be found in the Steem repo. This also means that some knowledge of System administration is also required. There are multiple advantages of running a testnet, you can test your scripts or applications on a testnet without extra spam on the live network, which allows much more flexibility to try new things. \nHaving access to a testnet also helps you to work on new features and possibly submit new or improved pull requests to official the Steem GitHub repository.\n\nRunning Testnet\n\nBy following official build steps and enabling the BUILD_STEEM_TESTNET flag during compilation, you should be able to run the Steem Testnet locally on your workstation and join the development testnet. Docker can also be used to get started quickly. Compilation generates the steemd executable which is the main daemon for the Steem network. Additional cli_wallet can also be compiled to test/connect to an instance of steemd and request some data from the network, but it is not necessary to run a node.\n\nThe development testnet requires a certain minimum set of hardware requirements, depending on the type of compile flags that have been enabled. Because it is a mirror of the live network, private keys are the same for accounts up to the point of the snapshot timestamp of the testnet.\n\nJoining/Running the development testnet requires around 10 GB for block log on an SSD and 8 GB RAM. The CPU requirements are the same.\n\nTestnet has the following parameters by default (as of this writing):\n\n\n  Initial supply (250 billion) - STEEM_INIT_SUPPLY 250,000,000,000\n  Max number of blocks to be produced - TESTNET_BLOCK_LIMIT 3,000,000\n  Address prefix, prefix on public addresses - STEEM_ADDRESS_PREFIX \"TST\"\n  Chain id name, used for chain id - STEEM_CHAIN_ID_NAME \"testnet\"\n  Chain id, unique id hash of chain - STEEM_CHAIN_ID (fc::sha256::hash(STEEM_CHAIN_ID_NAME))\n  Public key of genesis account - STEEM_INIT_PUBLIC_KEY_STR \n  Account creation fee - STEEM_MIN_ACCOUNT_CREATION_FEE 0\n\n\nThere are a number of other subtle changes that we don’t need to focus on right now.\n\nLive testnet\n\n\n  ChainID: 46d82ab7d8db682eb1959aed0ada039a6d49afa1602491f93dde9cac3e8e6c32\n  Address prefix: TST\n  API node: https://testnet.steemitdev.com\n\n\nAnyone can join the Live testnet and start testing their node and applications, become a witness, and provide API (RPC) node for public use.\n\nCustom Testnet\n\nIn order to create a custom testnet, separate from the development one, we need to modify a few parameters mentioned in the previous section.\n\nIn the file named steem/libraries/protocol/include/steem/protocol/config.hpp, we can see the first few lines dedicated to the Testnet section.  The line starts with #ifdef IS_TEST_NET.\n\nLet’s say we want to create a custom testnet with an initial supply of 1,000,000 STEEM. We can change STEEM_INIT_SUPPLY 1,000,000 and by changing STEEM_CHAIN_ID_NAME \"testnet\", testnet to mytestnet we will automatically get a unique Chain ID for our testnet. The address prefix can be set to something like MTN and of course, we need to change the public and private keys to the genesis account. Note that the genesis account will receive the entire pre-mined supply of 1,000,000.  That way, you can execute a setup script to fund any newly created accounts. Such a custom testnet will not have any additional hardware requirements to run.\n\nA minimum of 8GB RAM should be sufficient to run a custom testnet. Currently, Steem only has Linux and Mac compiling guides to build. A testnet can either be hosted locally, on a rented AWS, or dedicated bare metal servers so one can start testing functionality, explore different APIs, and start developing.\n\nOne more crucial point to modify is to change the number of witnesses required to accept hardforks for a custom testnet, by default it is set to 17, we can change it to 1 STEEM_HARDFORK_REQUIRED_WITNESSES 1 so that only one node instance would be sufficient and the network will be still functional and fast.\n\nAnother thing to note is that you can start a new chain with all previous hardforks already accepted, by changing the file named steem/blob/master/libraries/chain/database.cpp with the following function:\n\nvoid database::init_genesis( uint64_t init_supply ) inside try add this line:\n\nset_hardfork( 19, true );\n\nThis would mean that 19 hardforks have been accepted by witnesses and the new chain will start with all previous forks included.\n\nAfter these changes, all we have to do is compile the source code and get the steemd executable. And once we fire up the custom testnet we can start testing and experimenting.\n\nIf you want to port some data from Steem main network you can use Tinman, also developed by Steemit, to help with taking snapshots of the main network.\n\nCustom live testnet\n\n\n  ChainID: 79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673\n  Address prefix: STX\n  API node: https://testnet.steem.vc\n\n\nThe above testnet is powered by community member @almost-digital and doesn’t have a snapshot of the main network."
						}
						
					
				
			
				
					
						,
						
						"testnet-tools": {
							"id": "testnet-tools",
							"title": "Tools",
							"category": "testnet",
							"description": "Directory of community testnet tools",
		  				"type": "",
							"url": "/#testnettools",
							"content": "Testnet ID\n      Tool\n      Purpose\n    \n  \n  \n    \n      46d82ab\n      Steemit, Inc. Live Testnet Endpoint\n      For anyone who wants to start testing their node and applications.\n    \n    \n      79276ae\n      testnet.steem.vc\n      General bootstrapping to testnet.steem.vc maintained maintained by @almost-digital.\n    \n    \n      79276ae\n      TestNET Condenser\n      A condenser instance for testnet.steem.vc."
						}
						
					
				
			
		
			
				
					
						,
						
						"tutorials-index": {
							"id": "tutorials-index",
							"title": "Tutorials",
							"category": "tutorials",
							"description": "",
		  				"type": "",
							"url": "/#tutorialsindex",
							"content": "Read, play, and learn Steem.\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tJavascript\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Getting Started\n\t\t\t\t\t\t\tPrepare your development environment to use Javascript with the Steem blockchain\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Blog Feed\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to fetch most recent five posts from particular user on Steem\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Steemconnect\n\t\t\t\t\t\t\tUnderstand the basics of using Steemconnect with your Steem application\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Client Signing\n\t\t\t\t\t\t\tBy the end of this tutorial you would know how to sign verify broadcast transactions locally on Steem\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Get Posts\n\t\t\t\t\t\t\tQuery for the most recent posts having a specific tag using a Steem filter\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Get Post Details\n\t\t\t\t\t\t\tBy the end of this tutorial you would know how to get post details and use them appropriately\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Get Voters List On Post\n\t\t\t\t\t\t\tBy the end of this tutorial you would know how to get voters list on any content\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Get Post Comments\n\t\t\t\t\t\t\tBy the end of this tutorial you would know how to get comments made by others on any post\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Get Account Replies\n\t\t\t\t\t\t\tBy the end of this tutorial you would know how to get replies made on particular accounts content\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Get Account Comments\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to retrieve account comments from the steem blockchain\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Submit Post\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to prepare comments for Steem and then submit using the broadcastcomment function\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Submit Comment Reply\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to post a simple comment to Steem\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Edit Content Patching\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to patch post edits to Steem\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Stream Blockchain Transactions\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to stream transactions and blocks from Steem blockchain\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Reblogging Post\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to reblog resteem a blog from steemit\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Search Accounts\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to call a list of user names from the steem blockchain\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Search Tags\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to run a search for trending tags\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Vote On Content\n\t\t\t\t\t\t\tCreate a weighted up or down vote on a comment or post and send it to Steem\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Follow Another User\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to follow and unfollow a user  author\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Get Follower And Following List\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to create a list of followers and users that you are following\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Account Reputation\n\t\t\t\t\t\t\tIn this tutorial we will show how to interpret account reputation\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Transfer Steem And Sbd\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to transfer both STEEM and SBD from one account to another\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Claim Rewards\n\t\t\t\t\t\t\tIn this tutorial we will learn how to claim rewards from unclaimed reward balance using Steemconnect as well as client signing method\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Power Up Steem\n\t\t\t\t\t\t\tIn this tutorial we will learn how to power up Steem to account itself or another account using Steemconnect as well as with Clientside signing method\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Power Down\n\t\t\t\t\t\t\tIn this tutorial we will show how to perform a power down on all or part of an accounts VESTS using Steemconnect as well as show a clientside signing method\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Create Account\n\t\t\t\t\t\t\tIn this tutorial we will create Steem account using Steemconnect as well as with Clientside signing method\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Delegate Power\n\t\t\t\t\t\t\tIn this tutorial we will learn how to delegate power to other users using Steemconnect as well as with Clientside signing method\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tJS: Set Withdraw Route\n\t\t\t\t\t\t\tThis tutorial is about setting routes to your power downs or withdraws\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tPython\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Getting Started\n\t\t\t\t\t\t\tThe official Steem library for Python is steempython It comes with a BIP38 encrypted wallet and a practical CLI utility called steempy\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Get Posts\n\t\t\t\t\t\t\tThis tutorial pulls a list of the posts from the blockchain with selected filter and tag then displays output\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Get Post Details\n\t\t\t\t\t\t\tThis tutorial pulls a list of the posts from the blockchain with created filter and tag then display selected post details\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Get Voters List\n\t\t\t\t\t\t\tThis tutorial pulls a list of the voters on selected post from the blockchain\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Get Post Replies\n\t\t\t\t\t\t\tThis tutorial pulls a list of replies on selected post from the blockchain\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Get Account Replies\n\t\t\t\t\t\t\tBy the end of this tutorial you would know how to get replies made on particular accounts content\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Get Account Comments\n\t\t\t\t\t\t\tThis tutorial pulls a list of comments made by selected account from the blockchain\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Submit Post\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to submit a post to the Steem blockchain\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Reblog Post\n\t\t\t\t\t\t\tIn this tutorial we will show how to reblog post with your username and posting private key\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tPY: Using Keys Securely\n\t\t\t\t\t\t\tIn this tutorial we will learn how SteemPython library handles transaction signing with users key and how to securely manage your private keys\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tRuby\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Getting Started\n\t\t\t\t\t\t\tTo access the Steem blockchain using Ruby install the Radiator gem httpsgithubcominertia186radiatorhttpsgithubcominertia186radiator  Full documentation on Radiator api methods are hosted on rubydocinfohttpwwwrubydocinfogemsradiator\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Blog Feed\n\t\t\t\t\t\t\tThis example will output blog details to the terminal for the author specified limited to five results\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Get Posts\n\t\t\t\t\t\t\tGet Posts by Category\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Get Post Details\n\t\t\t\t\t\t\tUnderstand and use the most common fields of the requested content\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Get Voters List On Post\n\t\t\t\t\t\t\tThis example will output the active vote totals for the postcomment passed as an argument to the script\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Get Post Comments\n\t\t\t\t\t\t\tThis example will output the reply details and totals for the postcomment passed as an argument to the script\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Get Account Replies\n\t\t\t\t\t\t\tFetching the replies written to a particular account\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Get Account Comments\n\t\t\t\t\t\t\tFetching the comments written by a particular account\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Submit Post\n\t\t\t\t\t\t\tThis example will broadcast a new post to the blockchain using the values provided  To create a post in ruby we will use a RadiatorTransaction containing a comment operation which is how all content is stored internally\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Submit Comment Reply\n\t\t\t\t\t\t\tBy the end of this tutorial you should know how to prepare comments for Steem and then submit using Radiator\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Edit Content Patching\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Reblogging Post\n\t\t\t\t\t\t\tTo reblog resteem a post we can use a custom json operation that is handled by the follow plugin\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Search Accounts\n\t\t\t\t\t\t\tPerforming a search on account by names starting with a given input\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRB: Search Tags\n\t\t\t\t\t\t\tPerforming a search for tags\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tRecipes\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tEstimate the value of an upvote\n\t\t\t\t\t\t\tCalculate the approximate value of an upvote on Steem\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tForum/Market Bandwidth\n\t\t\t\t\t\t\tHow to interpret raw bandwidth data.\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tUsing jussi as a Multiplexer\n\t\t\t\t\t\t\tOptimize your local applications with jussi\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tUnderstanding Dynamic Global Properties\n\t\t\t\t\t\t\tMaintains global state information"
						}
						
					
				
			
		
			
				
					
						,
						
						"tutorials-javascript-account-reputation": {
							"id": "tutorials-javascript-account-reputation",
							"title": "JS: Account Reputation",
							"category": "tutorials-javascript",
							"description": "In this tutorial we will show how to interpret account reputation",
		  				"type": "",
							"url": "/#tutorials-javascriptaccount_reputation",
							"content": "Full, runnable src of Account Reputation can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial runs on the main Steem blockchain. And accounts queried are real users with reputation.\n\nIntro\n\nThis tutorial will show the method of capturing a queried tag name and matching it to the Steem. We are using the call function provided by the dsteem library to pull accounts from the Steem blockchain. A simple HTML interface is used to both capture the string query as well as display the completed search.\n\nsteps\n\n\n  App setup Configuration of dsteem to use the proper connection and network.\n  Search account Collecting the relevant search criteria\n  Interpret account reputation Running the search and interpreting reputation.\n  Output Displaying the results\n\n\n1. App setup \n\nBelow we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2. Search account \n\nCollecting of the search criteria happens via an HTML input. The form can be found in the index.html file. The values are pulled from that screen with the below:\n\nconst max = 5;\nwindow.submitAcc = async () =&gt; {\n    const accSearch = document.getElementById('username').value;\n\n\n\n3. Interpret account reputation \n\nIn order to get accounts, we run the search with the search field and maximum list items as parameters.\n\nconst _accounts = await client.database.call('lookup_accounts',[accSearch, max]);\n\n\n\nThe result of the search is an array of accounts. After that we use get_accounts to pull account data from Steem.\n\nconst acc = await client.database.call('get_accounts',[_accounts]);\n\n\n\nAnd we loop through each account to convert their reputation to human readable format with following function:\n\nfunction log10(str) {\n    const leadingDigits = parseInt(str.substring(0, 4));\n    const log = Math.log(leadingDigits) / Math.LN10 + 0.00000001;\n    const n = str.length - 1;\n    return n + (log - parseInt(log));\n}\n\nexport const repLog10 = rep2 =&gt; {\n    if (rep2 == null) return rep2;\n    let rep = String(rep2);\n    const neg = rep.charAt(0) === '-';\n    rep = neg ? rep.substring(1) : rep;\n\n    let out = log10(rep);\n    if (isNaN(out)) out = 0;\n    out = Math.max(out - 9, 0); // @ -9, $0.50 earned is approx magnitude 1\n    out = (neg ? -1 : 1) * out;\n    out = out * 9 + 25; // 9 points per magnitude. center at 25\n    // base-line 0 to darken and &lt; 0 to auto hide (grep rephide)\n    out = parseInt(out);\n    return out;\n};\n\n\n\n4. Output \n\nAfter each account’s reputation is interpreted we can then display them on screen with readable reputation.\n\n//disply list of account names and reputation with line breaks\nfor (var i = 0; i &lt; _accounts.length; i++) {\n    _accounts[i] = `${_accounts[i]} - ${repLog10(acc[i].reputation)}`;\n}\ndocument.getElementById('accList').innerHTML = _accounts.join('&lt;br/&gt;');\n\n\n\nThat’s it!\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/20_account_reputation\n  npm i\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-blog-feed": {
							"id": "tutorials-javascript-blog-feed",
							"title": "JS: Blog Feed",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to fetch most recent five posts from particular user on Steem",
		  				"type": "",
							"url": "/#tutorials-javascriptblog_feed",
							"content": "Full, runnable src of Blog Feed can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial pulls a list of the most recent five user’s posts from the blockchain and displays them in simple list. Also some notes about usage of client.database.getDiscussions API.\n\nIntro\n\nTutorial is demonstrates the typical process of fetching account blog posts. It is quite useful if you want to embedd your blog posts on your website these tutorial will help you achieve that goal as well. This tutorial will explain and show you how to access the Steem blockchain using the dsteem library to build a basic blog list of posts filtered by a tag\n\nSteps\n\n\n  Configure connection Configuration of dsteem to use proper connection and network\n  Query format Simple query format to help use fetch data\n  Fetch data and format Fetch data and display in proper interface\n\n\n\n\n1. Configure connection\n\nIn order to connect to the live Steem network, all we have to do is provide connection url to a server that runs on the network. dsteem by default set up to use live network but it has flexibility to adjust connection to any other testnet or custom networks, more on that in future tutorials.\n\nIn first couple lines we require package and define connection server:\n\nconst { Client } = require('dsteem');\n\nconst client = new Client('https://api.steemit.com');\n\n\n\n2. Query format\n\n\n  You can add a tag to filter the blog posts that you receive from the server, since we are aiming to fetch blog posts of particular user, we will define username as tag.\n  You can also limit the number of results you would like to receive from the query\n\n\nvar query = {\n    tag: 'steemitblog', // This tag is used to filter the results by a specific post tag\n    limit: 5, // This limit allows us to limit the overall results returned to 5\n};\n\n\n\n3. Fetch data and format\n\nclient.database.getDiscussions function is used for fetching discussions or posts. The first argument to this function determines which equivalent of the appbase condenser_api.get_discussions_by_* api calls it’s going to use.  Below is example of query and keyword ‘blog’ indicates condenser_api.get_discussions_by_blog and somewhat counter-intuitively query.tag indicates the account from which we want to get posts.\n\n    client.database\n        .getDiscussions('blog', query)\n        .then(result =&gt; {\n            var posts = [];\n            result.forEach(post =&gt; {\n                const json = JSON.parse(post.json_metadata);\n                const image = json.image ? json.image[0] : '';\n                const title = post.title;\n                const author = post.author;\n                const created = new Date(post.created).toDateString();\n                posts.push(\n                    `&lt;div class=\"list-group-item\"&gt;&lt;h4 class=\"list-group-item-heading\"&gt;${title}&lt;/h4&gt;&lt;p&gt;by ${author}&lt;/p&gt;&lt;center&gt;&lt;img src=\"${image}\" class=\"img-responsive center-block\" style=\"max-width: 450px\"/&gt;&lt;/center&gt;&lt;p class=\"list-group-item-text text-right text-nowrap\"&gt;${created}&lt;/p&gt;&lt;/div&gt;`\n                );\n            });\n\n            document.getElementById('postList').innerHTML = posts.join('');\n        })\n        .catch(err =&gt; {\n            alert('Error occured' + err);\n        });\n\n\n\nThe result returned form the service is a JSON object with the following properties:\n\n[\n    {\n        \"id\": 37338948,\n        \"author\": \"steemitblog\",\n        \"permlink\": \"join-team-steemit-at-tokenfest\",\n        \"category\": \"steemit\",\n        \"parent_author\": \"\",\n        \"parent_permlink\": \"steemit\",\n        \"title\": \"Join Team Steemit at TokenFest!\",\n        \"body\":\n            \"&lt;a href=\\\"https://tokenfest.adria.digital\\\"&gt;&lt;img src=\\\"https://i.imgur.com/fOScDIW.png\\\"/&gt;&lt;/a&gt;\\n\\nHello Steemians! If you’d like to meet Team Steemit live-in-person, or are just interested in attending what promises to be a great blockchain conference, join us at &lt;a href=\\\"https://tokenfest.adria.digital/\\\"&gt;TokenFest&lt;/a&gt; in San Francisco from March 15th to 16th. \\n\\nSteemit CEO, Ned Scott, will be participating in a fireside chat alongside Steemit’s CTO, Harry Schmidt, as well as the creator of Utopian.io, Diego Pucci. Steemit will also be hosting the opening party on Thursday night and we’d certainly love to meet as many of you as possible IRL, so head on over to https://tokenfest.adria.digital/ and get your tickets while you can. \\n\\n*Team Steemit*\",\n        \"json_metadata\":\n            \"{\\\"tags\\\":[\\\"steemit\\\",\\\"tokenfest\\\",\\\"conference\\\"],\\\"image\\\":[\\\"https://i.imgur.com/fOScDIW.png\\\"],\\\"links\\\":[\\\"https://tokenfest.adria.digital\\\",\\\"https://tokenfest.adria.digital/\\\"],\\\"app\\\":\\\"steemit/0.1\\\",\\\"format\\\":\\\"markdown\\\"}\",\n        \"last_update\": \"2018-03-07T23:22:54\",\n        \"created\": \"2018-03-07T20:56:36\",\n        \"active\": \"2018-03-13T01:40:21\",\n        \"last_payout\": \"1970-01-01T00:00:00\",\n        \"depth\": 0,\n        \"children\": 29,\n        \"net_rshares\": \"11453442114933\",\n        \"abs_rshares\": \"11454054795840\",\n        \"vote_rshares\": \"11454054795840\",\n        \"children_abs_rshares\": \"13568695606090\",\n        \"cashout_time\": \"2018-03-14T20:56:36\",\n        \"max_cashout_time\": \"1969-12-31T23:59:59\",\n        \"total_vote_weight\": 3462435,\n        \"reward_weight\": 10000,\n        \"total_payout_value\": \"0.000 SBD\",\n        \"curator_payout_value\": \"0.000 SBD\",\n        \"author_rewards\": 0,\n        \"net_votes\": 77,\n        \"root_comment\": 37338948,\n        \"max_accepted_payout\": \"0.000 SBD\",\n        \"percent_steem_dollars\": 10000,\n        \"allow_replies\": true,\n        \"allow_votes\": true,\n        \"allow_curation_rewards\": true,\n        \"beneficiaries\": [],\n        \"url\": \"/steemit/@steemitblog/join-team-steemit-at-tokenfest\",\n        \"root_title\": \"Join Team Steemit at TokenFest!\",\n        \"pending_payout_value\": \"46.436 SBD\",\n        \"total_pending_payout_value\": \"0.000 STEEM\",\n        \"active_votes\": [\n            {\n                \"voter\": \"steemitblog\",\n                \"weight\": 0,\n                \"rshares\": \"1870813909383\",\n                \"percent\": 10000,\n                \"reputation\": \"128210130644387\",\n                \"time\": \"2018-03-07T20:56:36\"\n            },\n            {\n                \"voter\": \"kevinwong\",\n                \"weight\": 526653,\n                \"rshares\": \"2208942520687\",\n                \"percent\": 5000,\n                \"reputation\": \"374133832002581\",\n                \"time\": \"2018-03-08T04:27:00\"\n            }\n        ],\n        \"replies\": [],\n        \"author_reputation\": \"128210130644387\",\n        \"promoted\": \"0.000 SBD\",\n        \"body_length\": 754,\n        \"reblogged_by\": []\n    }\n]\n\n\n\nFrom this result we have access to everything associated to the post including additional metadata which is a JSON string that must be decoded to use. This JSON object has additional information and properties for the post including a reference to the image uploaded. And we are displaying this data in meaningful user interface. Note: it is truncated to one element, but you would get five posts in array\n\nThat’s all there is to it.\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/01_blog_feed\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-claim-rewards": {
							"id": "tutorials-javascript-claim-rewards",
							"title": "JS: Claim Rewards",
							"category": "tutorials-javascript",
							"description": "In this tutorial we will learn how to claim rewards from unclaimed reward balance using Steemconnect as well as client signing method",
		  				"type": "",
							"url": "/#tutorials-javascriptclaim_rewards",
							"content": "Full, runnable src of Claim Rewards can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial runs on the main Steem blockchain. And accounts queried are real users with unclaimed balances.\n\nIntro\n\nThis tutorial will show few functions such as querying account by name and getting unclaimed rewards. We are using the call function provided by the dsteem library to pull accounts from the Steem blockchain. A simple HTML interface is used to capture the account and its unclaimed balance as well as allowing interactively claim rewards.\n\nSteps\n\n\n  App setup Setup dsteem to use the proper connection and network.\n  Search account Get account details after input has account name\n  Fill form Fill form with account reward balances\n  Claim reward Claim reward with Steemconnect or Client signing options\n\n\n1. App setup \n\nBelow we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2. Search account \n\nAfter account name field is filled with some name, we do automatic search for account by name when input is focused out. HTML input forms can be found in the index.html file. The values are pulled from that screen with the below:\n\n    const accSearch = document.getElementById('username').value;\n    const _accounts = await client.database.call('get_accounts', [[accSearch]]);\n    console.log(`_accounts:`, _accounts);\n\n\n\n3. Fill form \n\nAfter we fetched account data, we will fill form with reward balance and show current reward balance details.\n\nconst name = _accounts[0].name;\nconst reward_steem = _accounts[0].reward_steem_balance.split(' ')[0];\nconst reward_sbd = _accounts[0].reward_sbd_balance.split(' ')[0];\nconst reward_sp = _accounts[0].reward_vesting_steem.split(' ')[0];\nconst reward_vests = _accounts[0].reward_vesting_balance.split(' ')[0];\nconst unclaimed_balance = `Unclaimed balance for ${name}: ${reward_steem} STEEM, ${reward_sbd} SBD, ${reward_sp} SP = ${reward_vests} VESTS&lt;br/&gt;`;\ndocument.getElementById('accList').innerHTML = unclaimed_balance;\ndocument.getElementById('steem').value = reward_steem;\ndocument.getElementById('sbd').value = reward_sbd;\ndocument.getElementById('sp').value = reward_vests;\n\n\n\n4. Claim reward \n\nWe have 2 options on how to claim rewards. Steemconnect and Client signing options. We generate Steemconnect link to claim rewards, but you can also choose client signing option to claim rewards right inside tutorial.\n\nIn order to enable client signing, we will generate operation and also show Posting Private key (wif) field to sign transaction right there client side.\nBelow you can see example of operation and signing transaction, after successful operation broadcast result will be shown in user interface. It will be block number that transaction was included.\n\nwindow.submitTx = async () =&gt; {\n    const privateKey = dsteem.PrivateKey.fromString(\n        document.getElementById('wif').value\n    );\n    const op = [\n        'claim_reward_balance',\n        {\n            account: document.getElementById('username').value,\n            reward_steem: document.getElementById('steem').value + ' STEEM',\n            reward_sbd: document.getElementById('sbd').value + ' SBD',\n            reward_vests: document.getElementById('sp').value + ' VESTS',\n        },\n    ];\n    client.broadcast.sendOperations([op], privateKey).then(\n        function(result) {\n            document.getElementById('result').style.display = 'block';\n            document.getElementById(\n                'result'\n            ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n                result.block_num\n            }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;`;\n        },\n        function(error) {\n            console.error(error);\n        }\n    );\n};\n\n\n\nThat’s it!\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/21_claim_rewards\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-client-signing": {
							"id": "tutorials-javascript-client-signing",
							"title": "JS: Client Signing",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you would know how to sign verify broadcast transactions locally on Steem",
		  				"type": "",
							"url": "/#tutorials-javascriptclient_signing",
							"content": "Full, runnable src of Client Signing can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial gives you overview of how client side transaction signing works under the hood.\n\nPurpose is to guide you through the steps required so that you could adapt this in your own applications.\n\nWe have predefined accounts to select for you to quickly use and few transaction types to test the process.\n\nIntro\n\nClient side signing of transaction is yet another way of interacting with Steem blockchain. Compare to Steemconnect method, client signing doesn’t rely on other servers to generate and verify transaction, except when transaction is broadcasted to the network, it should be routed through one of the servers connected to that network or blockchain. It can be your own local machine running Steem blockchain or it could be any other publicly accessible servers.\n\nSteps\n\n\n  App setup Import dsteem into app.js and prepare it to communicate with a Testnet instance of Steem blockchain\n  Get globals Network globals\n  Account selection Select predefined account\n  Operation selection Select common operations\n  Generate transaction Generate transaction with selected account and operation\n  Sign and verify transaction Sign and verify signature of the transaction\n  Broadcast transaction Broadcast signed transaction to the network\n\n\n1. App setup\n\nTestnet and Production networks only differ with few settings which helps developers to switch their application from testnet to production. One of these settings is addressPrefix - string that is defined and will be in front of every public address on that chain/network. Another one is chainId - id of that network. By defining those parameters we are selecting Testnet and connecting to publicly available server with help of dsteem library. First few lines of code in public/app.js gives you example of connection to different networks, testnet and production.\n\nopts.addressPrefix = 'TST';\nopts.chainId =\n    '46d82ab7d8db682eb1959aed0ada039a6d49afa1602491f93dde9cac3e8e6c32';\n//connect to server which is connected to the network/testnet\nconst client = new dsteem.Client('https://testnet.steemitdev.com', opts);\n\n\n\n\n  Disclaimer: In this tutorial we are using testnet powered by community member (@almost-digital) and predefined accounts reside on this network only.\n\n\n2. Get globals\n\nTo test connection as well as to get parameters of the connected network, we can use getDynamicGlobalProperties function from dsteem library. Only 2 fields are in our interesting for this tutorial, head_block_number - returns head or latest block number of the network, head_block_id - returns id of head block.\n\n\n\n3. Account selection\n\nWe have predefined list of accounts to help you with generate, sign, verify and broadcast transaction on testnet. Select list has posting private key for each account and onchange selection event we keep account name and credentials in memory. accountChange function shows example of turning plain posting private key into private key buffer format that is understandable by dsteem.\n\nprivateKey = dsteem.PrivateKey.fromString(\n    document.getElementById('account').value\n);\n\n\n\nAccount and its credentials should belong to specified testnet/mainnet network to sign/verify/broadcast transactions properly.\n\n4. Operation selection\n\nNumber of operations are also predefined to show you example of operation format. opChange also keeps selected operation name in memory.\n\n5. Generate transaction\n\nNext we have button which helps us to generate operation object. Depending on selected operation type we have different structure for operation object. Typically, each transaction object has following fields:\n\n\n  ref_block_num - references block number in past, in this example we have chosen head block number, but it is possible to use a block number from up to 65,536 blocks ago. This is required in TaPoS (Transaction as Proof of Stake) to avoid network forks.\n  ref_block_prefix - reference buffer of block id of ref_block_num as prefix\n  expiration - transaction expiration date in future, in our example we have set it +1 minute into future\n  operations - array of operations, this field holds main information about transaction type and its structure which is recognized by the network\n  extensions - any extensions to the transaction to change its parameters or options\n\n\nVote operation example\n\nop = {\n    ref_block_num: head_block_number,\n    ref_block_prefix: Buffer.from(head_block_id, 'hex').readUInt32LE(4),\n    expiration: new Date(Date.now() + expireTime).toISOString().slice(0, -5),\n    operations: [['vote', {\n        voter: account,\n        author: 'test',\n        permlink: 'test',\n        weight: 10000\n    }]],\n    extensions: [],\n}\n\n\n\nFirst item, operation type, vote and second item object with voter - account that is casting vote, author - author of post vote is being casted to, permlink - permanent link of the post, weight - vote weight 10000 being 100%, 1 being 0.01% smallest voting unit.\n\nAnd output of operation object/json is set to OpInput element.\n\n6. Sign and verify transaction\n\nEach operation needs to be signed before they can be sent to the network, transactions without signature will not be accepted by network. Because someone has to identify operation and sign it with their private keys. Sign transaction button calls for signTx function which is job is to sign selected operation and its obkect with selected account. And output result into TxOutput element.\n\nstx = client.broadcast.sign(op, privateKey)\n\nVerifying transaction process is mostly done automatically but to show every step, we have included this process to check validity of the transaction signature. Verify transaction button calls verifyTx function. Function then verify authority of the signature in signed transaction, if it was signed with correct private key and authority. If verification is successful user interfaces adds checkmark next to button otherwise adds crossmark to indicate state of the signature.\n\nconst rv = await client.database.verifyAuthority(stx)\n\n7. Broadcast transaction\n\nFinal step is to broadcast our signed transction to the selected server. Server chosen in Connect section will handle propagating transction to the network. After network accepts transaction it will return result with transaction id, block_num that this transaction is included to, trx_num transaction number, and if it is expired or not.\n\nconst res = await client.broadcast.send(stx)\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/03_client_signing\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-create-account": {
							"id": "tutorials-javascript-create-account",
							"title": "JS: Create Account",
							"category": "tutorials-javascript",
							"description": "In this tutorial we will create Steem account using Steemconnect as well as with Clientside signing method",
		  				"type": "",
							"url": "/#tutorials-javascriptcreate_account",
							"content": "Full, runnable src of Create Account can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial runs on the main Steem blockchain. And accounts queried/searched are real accounts and creator account show have sufficient liquid balance to create new account.\n\nIntro\n\nThis tutorial will show few functions such as querying account by name and check if username is taken or available to register. We are using the call function provided by the dsteem library to pull account from the Steem blockchain. We then create proper private keys for new account. A simple HTML interface is used to enter payment of account creation fee and create account right inside tutorial.\n\nSteps\n\n\n  App setup Setup dsteem to use the proper connection and network.\n  Search account Get account details after input has account name\n  Generate private keys Generate proper keys for new account\n  Create account Create account via Client-side or Steemconnect\n\n\n1. App setup \n\nBelow we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2. Search account \n\nAfter account name field is filled with some name, tutorial has Search button to search for account by name. HTML input forms can be found in the index.html file. The values are pulled from that screen with the below:\n\n    const accSearch = document.getElementById('username').value;\n    let avail = 'Account is NOT available to register'\n    if (accSearch.length&gt;2) {\n        const _account = await client.database.call('get_accounts', [[accSearch]]);\n        console.log(`_account:`, _account, accSearch.length);\n\n        if (_account.length==0) {\n            avail = 'Account is available to register'\n        }\n    }\n\n\n\nWe will then do simple check if account is taken or not.\n\n3. Generate private keys \n\nAfter we know that account is available to register, we will fill form with password we wish for that account and enter creation fee. Note, that creation fees are deposited into new account, if VESTS is entered it will be powered up to new account.\n\nconst username = document.getElementById('username').value;\nconst password = document.getElementById('password').value;\n\nconst ownerKey = dsteem.PrivateKey.fromLogin(username, password, 'owner');\nconst activeKey = dsteem.PrivateKey.fromLogin(username, password, 'active');\nconst postingKey = dsteem.PrivateKey.fromLogin(username, password, 'posting');\nconst memoKey = dsteem.PrivateKey.fromLogin(username, password, 'memo');\n\nconst ownerAuth = {\n    weight_threshold: 1,\n    account_auths: [],\n    key_auths: [[ownerKey.createPublic(), 1]],\n};\nconst activeAuth = {\n    weight_threshold: 1,\n    account_auths: [],\n    key_auths: [[activeKey.createPublic(), 1]],\n};\nconst postingAuth = {\n    weight_threshold: 1,\n    account_auths: [],\n    key_auths: [[postingKey.createPublic(), 1]],\n};\n\n\n\nAbove script shows, how to properly setup private keys of new account.\n\n4. Create account \n\nAfter following all steps properly, we can now submit transaction to create new account.\n\nconst privateKey = dsteem.PrivateKey.fromString(\n    document.getElementById('wif').value\n);\nconst op = [\n    'account_create',\n    {\n        creator: document.getElementById('account').value,\n        new_account_name: username,\n        owner: ownerAuth,\n        active: activeAuth,\n        posting: postingAuth,\n        memo_key: memoKey,\n        json_metadata: '',\n    },\n];\n\nclient.broadcast.sendOperations([op], privateKey).then(\n    function(result) {\n        document.getElementById('result').style.display = 'block';\n        document.getElementById(\n            'result'\n        ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n            result.block_num\n        }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;`;\n    },\n    function(error) {\n        console.error(error);\n    }\n);\n\n\n\nNote in above creator’s account name and active private keys are used for creation.\n\nThat’s it!\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/24_create_account\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-delegate-power": {
							"id": "tutorials-javascript-delegate-power",
							"title": "JS: Delegate Power",
							"category": "tutorials-javascript",
							"description": "In this tutorial we will learn how to delegate power to other users using Steemconnect as well as with Clientside signing method",
		  				"type": "",
							"url": "/#tutorials-javascriptdelegate_power",
							"content": "Full, runnable src of Delegate Power can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial runs on the main Steem blockchain. And accounts queried/searched are real accounts with their available VESTS balances and estimated STEEM POWER holdings.\n\nIntro\n\nThis tutorial will show few functions such as querying account by name and getting account vesting balance. We then convert VESTS to STEEM POWER for convenience of user. And allow user to choose portion or all holdings of VESTS to delegate other users. A simple HTML interface is provided to capture the account with search and its VESTS balance as well as allowing interactively delegate.\n\nSteps\n\n\n  App setup Setup dsteem to use the proper connection and network.\n  Search account Get account details after input has account name\n  Calculate and Fill form Calculate available vesting shares and Fill form with details\n  Delegate power Delegate VESTS with Steemconnect or Client-side signing.\n\n\n1. App setup \n\nBelow we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2. Search account \n\nAfter account name field is filled with some name, we do automatic search for account by name when input is focused out. HTML input forms can be found in the index.html file. The values are pulled from that screen with the below:\n\n    const accSearch = document.getElementById('username').value;\n    const _account = await client.database.call('get_accounts', [[accSearch]]);\n    console.log(`_account:`, _account);\n\n\n\n3. Calculate and Fill form \n\nAfter we fetched account data, we will fill form with VESTS balance and show current balance details. Note, that in order to get available VESTS balance we will have to check if account is already powering down and how much is powering down, how much of VESTS were delegated out which locks them from being powered down. Available balance will be in avail variable, next for convenience of user, we convert available VESTS to STEEM with getDynamicGlobalProperties function and fill form fields accordingly.\n\n    const name = _account[0].name;\n    const avail = parseFloat(_account[0].vesting_shares) - (parseFloat(_account[0].to_withdraw) - parseFloat(_account[0].withdrawn)) / 1e6 - parseFloat(_account[0].delegated_vesting_shares);\n\n    const props = await client.database.getDynamicGlobalProperties();\n    const vestSteem = parseFloat(parseFloat(props.total_vesting_fund_steem) *\n        (parseFloat(avail) / parseFloat(props.total_vesting_shares)),6);\n\n    const balance = `Available Vests for ${name}: ${avail} VESTS ~ ${vestSteem} STEEM POWER&lt;br/&gt;&lt;br/&gt;`;\n    document.getElementById('accBalance').innerHTML = balance;\n    document.getElementById('steem').value = avail+' VESTS';\n\n\n\nOnce form is filled with maximum available VESTS balance, you can choose portion or lesser amount of VESTS to delegate other user.\n\n4. Delegate power \n\nWe have 2 options on how to delegate others. Steemconnect and Client-side signing options. By default we generate Steemconnect link to delegate power (delegate vesting shares), but you can choose client signing option to delegate right inside tutorial, note client-side signing will require Active Private key to perform the operation.\n\nIn order to enable client signing, we will generate operation and also show Active Private key (wif) field to sign transaction client side.\nBelow you can see example of operation and signing transaction, after successful operation broadcast result will be shown in user interface. It will be block number that transaction was included.\n\nwindow.submitTx = async () =&gt; {\n    const privateKey = dsteem.PrivateKey.fromString(\n        document.getElementById('wif').value\n    );\n    const op = [\n        'delegate_vesting_shares',\n        {\n            delegator: document.getElementById('username').value,\n            delegatee: document.getElementById('account').value,\n            vesting_shares: document.getElementById('steem').value,\n        },\n    ];\n    client.broadcast.sendOperations([op], privateKey).then(\n        function(result) {\n            document.getElementById('result').style.display = 'block';\n            document.getElementById(\n                'result'\n            ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n                result.block_num\n            }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;`;\n        },\n        function(error) {\n            console.error(error);\n        }\n    );\n};\n\n\n\nThat’s it!\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/25_delegate_power\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-edit-content-patching": {
							"id": "tutorials-javascript-edit-content-patching",
							"title": "JS: Edit Content Patching",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to patch post edits to Steem",
		  				"type": "",
							"url": "/#tutorials-javascriptedit_content_patching",
							"content": "Full, runnable src of Edit Content Patching can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will take you through the process of preparing and patching post using the broadcast.comment operation. Being able to patch a post is critical to save resources on Steem.\n\nIntro\n\nTutorial is demonstrating the typical process of editing content that has been previously posted on the blockchain. Instead of replacing the entire body of the post, the Steem blockchain offers an alternative strategy.\nIn this tutorial, we will focus on properly patching existing content and then broadcasting the patch with a demo account on a testnet.\n\nWe are using the broadcast.comment function provided by dsteem which generates, signs, and broadcast the transaction to the network. On the Steem platform, posts and comments are all internally stored as a comment object, differentiated by whether or not a parent_author exists. When there is no parent_author, it’s a post, when there is, it’s a comment. When editing a post, we need to make sure that we don’t resubmit the same post over and over again, which will spam the network and adds additional cost to operate the platform. Instead we will use a package called diff-match-patch, which allows us to only apply changes and save resources on the Steem platform.\n\nSteps\n\n\n  Configure testnet Testnet connection should be established with proper configurations\n  Get latest post Get @demo’s latest post for editing\n  Creating patch Creating patch with new edited text\n  Submit a patch Submit newly formatted post\n\n\n1. Configure testnet\n\nAs usual, we have a file called public/app.js, which holds the Javascript segment of the tutorial. In the first few lines, we have defined the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to community testnet\nopts.addressPrefix = 'STX';\nopts.chainId =\n    '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673';\n//connect to server which is connected to the network/testnet\nconst client = new dsteem.Client('https://testnet.steem.vc', opts);\n\n\n\nAbove, we have dsteem pointing to the test network with the proper chainId, addressPrefix, and endpoint. Because this tutorial is interactive, we will not publish test content to the main network. Instead, we’re using testnet and a predefined account to demonstrate post patching.\n\n2. Get latest post\n\nNext, we have a main function which fires at on-load and fetches latest blog post of @demo account and fills in the form with relevant information.\n\nconst query = { tag: 'demo', limit: '1' };\nclient.database\n    .call('get_discussions_by_blog', [query])\n    .then(result =&gt; {\n        document.getElementById('title').value = result[0].title;\n        document.getElementById('body').value = result[0].body;\n        document.getElementById('tags').value = JSON.parse(\n            result[0].json_metadata\n        ).tags.join(' ');\n        o_body = result[0].body;\n        o_permlink = result[0].permlink;\n    })\n    .catch(err =&gt; {\n        console.log(err);\n        alert('Error occured, please reload the page');\n    });\n\n\n\nNotice, we are only fetching a single blog post by specifying a limit and we have filled all necessary fields/variables with the old content.\n\n3. Creating patch\n\nWe have created a small function called createPatch to patch edits to the old content.\n\nfunction createPatch(text, out) {\n    if (!text &amp;&amp; text === '') return undefined;\n    //get list of patches to turn text to out\n    const patch_make = dmp.patch_make(text, out);\n    //turns patch to text\n    const patch = dmp.patch_toText(patch_make);\n    return patch;\n}\n\n\n\nThe createPatch function computes a list of patches to turn old content to edited content.\n\n4. Submit a patch\n\nNext, we have the submitPost function, which executes when the Submit button is clicked.\n\n//get private key\nconst privateKey = dsteem.PrivateKey.fromString(\n    document.getElementById('postingKey').value\n);\n//get account name\nconst account = document.getElementById('username').value;\n//get title\nconst title = document.getElementById('title').value;\n//get body\nconst edited_body = document.getElementById('body').value;\n\nlet body = '';\n\n//computes a list of patches to turn o_body to edited_body\nconst patch = createPatch(o_body, edited_body);\n\n//check if patch size is smaller than original content\nif (patch &amp;&amp; patch.length &lt; new Buffer(o_body, 'utf-8').length) {\n    body = patch;\n} else {\n    body = o_body;\n}\n\n//get tags and convert to array list\nconst tags = document.getElementById('tags').value;\nconst taglist = tags.split(' ');\n//make simple json metadata including only tags\nconst json_metadata = JSON.stringify({ tags: taglist });\n//generate random permanent link for post\nconst permlink = o_permlink;\n\nclient.broadcast\n    .comment(\n        {\n            author: account,\n            body: body,\n            json_metadata: json_metadata,\n            parent_author: '',\n            parent_permlink: taglist[0],\n            permlink: permlink,\n            title: title,\n        },\n        privateKey\n    )\n    .then(\n        function(result) {\n            document.getElementById('title').value = '';\n            document.getElementById('body').value = '';\n            document.getElementById('tags').value = '';\n            document.getElementById('postLink').style.display = 'block';\n            document.getElementById(\n                'postLink'\n            ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n                result.block_num\n            }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=\"http://condenser.steem.vc/${\n                taglist[0]\n            }/@${account}/${permlink}\"&gt;Check post here&lt;/a&gt;`;\n        },\n        function(error) {\n            console.error(error);\n        }\n    );\n\n\n\nAs you can see from the above function, we get the relevant values from the defined fields. Tags are separated by spaces in this example, but the structure of how to enter tags totally depends on your needs. We have separated tags with whitespaces and stored them in an array list called taglist, for later use. Posts on the blockchain can hold additional information in the json_metadata field, such as the tags list which we have assigned. Posts must also have a unique permanent link scoped to each account. In this case we are just creating a random character string.\n\nIn the follow code, we patch the old content with new (or edited) content and make sure that the patch size is smaller than original content, otherwise patching is unnecessary.\n\n//computes a list of patches to turn o_body to edited_body\nconst patch = createPatch(o_body, edited_body);\n\n//check if patch size is smaller than original content\nif (patch &amp;&amp; patch.length &lt; new Buffer(o_body, 'utf-8').length) {\n    body = patch;\n} else {\n    body = o_body;\n}\n\n\n\nThe next step is to pass all of these parameters to the client.broadcast.comment function. Note that in parameters you can see the parent_author and parent_permlink fields, which are used for replies (also known as comments). In our example, since we are publishing a post instead of a comment/reply, we will have to leave parent_author as an empty string and assign parent_permlink from the first tag.\n\nAfter the post has been broadcasted to the network, we can simply set all the fields to empty strings and show the post link to check it from a condenser instance running on the selected testnet. That’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/12_edit_content_patching\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-follow-another-user": {
							"id": "tutorials-javascript-follow-another-user",
							"title": "JS: Follow Another User",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to follow and unfollow a user  author",
		  				"type": "",
							"url": "/#tutorials-javascriptfollow_another_user",
							"content": "Full, runnable src of Follow Another User can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will take you through the process of checking the follow status of an author and either follow or unfollow that user depending on the current status. This is done with the call operation as well as the broadcast.json operation.\n\nIntro\n\nWe are using the broadcast.json operation provided by the dsteem library to follow or unfollow a selected author. There are 4 variables required to execute this operation:\n\n\n  follower - The specific user that will select the author to follow/unfollow (username).\n  privatekey - This is the private posting key of the user(postingKey).\n  following - The account/author that the user would like to follow (author).\n  what - The type of follow operation. This variable can have one of two values: blog, to follow an author, and a null value, unfollow the selected author.\n\n\nA simple HTML UI is used to capture the required information, after which the broadcast operation can be compiled.\n\nSteps\n\n\n  Configure connection Configuration of dsteem to communicate with the Steem blockchain\n  Input variables Collecting the required inputs via an HTML UI\n  Get status Get the follow status for the specified author\n  Follow operation Execute the follow operation\n\n\n1. Configure connection\n\nAs usual, we have a public/app.js file which holds the Javascript segment of the tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\n//define network parameters\nlet opts = {};\nopts.addressPrefix = 'STX';\nopts.chainId = '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673';\n//connect to a steem node, testnet in this case\nconst client = new dsteem.Client('https://testnet.steem.vc', opts);\n\n\n\nAbove, we have dsteem pointing to the test network with the proper chainId, addressPrefix, and endpoint.\n\n2. Input variables\n\nThe required parameters for the follow operation is recorded via an HTML UI that can be found in the public/index.html file.\n\nThe parameter values are allocated as seen below once the user clicks on the “Follow / Unfollow” button.\n\nwindow.submitFollow = async () =&gt; {\n    //get private key\n    const privateKey = dsteem.PrivateKey.fromString(\n        document.getElementById('postingKey').value\n    );\n    //get account name\n    const follower = document.getElementById('username').value;\n    //get author permalink\n    const following = document.getElementById('author').value;\n\n\n\n3. Get status\n\nThe current follow status for the author is called from the database and a variable is assigned in order to specify whether the follow operation should execute as follow or unfollow. For more information on this process you can refer to tutorial 19_get_follower_and_following_list.\n\nconsole.log({ follower: follower, following: following });\n\n    let status = await client.call('follow_api', 'get_following', [\n        follower,\n        following,\n        'blog',\n        1,\n    ]);\n\n    console.log({ status: status });\n\n    if (status.length &gt; 0 &amp;&amp; status[0].following == following) {\n        type = '';\n    } else {\n        type = 'blog';\n    }\n\n\n\n4. Follow operation\n\nA JSON with the collected input variables is created in order for the data object within the broadcast operation to be completed.\n\nconst json = JSON.stringify([\n        'follow',\n        {\n            follower: follower,\n            following: following,\n            what: [type] //null value for unfollow, 'blog' for follow\n        }\n    ]);\n\n\n\nThe broadcast.json operation requires a data object and private key in order the execute. For the follow/unfollow operation the variables in the object have predefined values. These values can change depending on the type of operation.\n\n    const data = {\n        id: 'follow',\n        json: json,\n        required_auths: [],\n        required_posting_auths: [follower],\n    };\n\n\n\nThe broadcast operation is then executed with the created object and the private posting key. We also display the follow status on the UI in order for the user to know the whether the process was a success.\n\nclient.broadcast.json(data, privateKey).then(\n        function(result) {\n            console.log(\n                'user follow result: ', result\n            );\n            document.getElementById('followResultContainer').style.display =\n                'flex';\n            document.getElementById('followResult').className =\n                'form-control-plaintext alert alert-success';\n            if (type == 'blog') {\n                document.getElementById('followResult').innerHTML = 'Author followed';\n\n            } else {\n                document.getElementById('followResult').innerHTML = 'Author unfollowed';\n            }\n        },\n        function(error) {\n            console.error(error);\n            document.getElementById('followResultContainer').style.display =\n                'flex';\n            document.getElementById('followResult').className =\n                'form-control-plaintext alert alert-danger';\n            document.getElementById('followResult').innerHTML =\n                error.jse_shortmsg;\n        }\n\n    );\n\n\n\nIf either of the values for the user or author does not exist the proper error result will be displayed on the UI. The result is also displayed in the console in order for the user to confirm that a block transaction has taken place. The status of the operation can be verified on the demo account.\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/18_follow_user\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-get-account-comments": {
							"id": "tutorials-javascript-get-account-comments",
							"title": "JS: Get Account Comments",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to retrieve account comments from the steem blockchain",
		  				"type": "",
							"url": "/#tutorials-javascriptget_account_comments",
							"content": "Full, runnable src of Get Account Comments can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will show how to fetch comments made by a specific account (in this case @steemitblog) by demonstrating how to use the get_state api function call. We will also demonstrate the most commonly used fields from the response object as well as how to parse the body of each comment.\n\nIntro\n\nWe are using the get_state function with dsteem that returns the current state of the network as well as additional content. Each content body is written in markdown and could be submitted to the blockchain by many different applications built on top of Steem. For that reason we are using the remarkable npm package to parse markdown in a readable format.\n\nSteps\n\n\n  App setup Configuration of dsteem to use the proper connection and network.\n  Query Query the path which we want to extract from Steem blockchain state.\n  Formatting Formatting the JSON object to be viewed in a simple user interface.\n\n\n1. App setup\n\nBelow we have dsteem pointing to the main network with the proper chainId, addressPrefix and connection server.\nThere is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define and configure library and packages.\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\nconst Remarkable = require('remarkable');\nconst md = new Remarkable({ html: true, linkify: true });\n\n\n\nremarkable is assigned to the variable md with linkify and html options, allowing us to parse markdown links and html properly.\n\n2. Query\n\nNext, we have the main function which runs when the page is loaded.\n\n// query string, fetching comments made by @steemitblog account\nconst query = '/@steemitblog/comments';\n\nclient.database.call('get_state', [query]).then(result =&gt; {\n    // work with state object\n});\n\n\n\nquery is the path from where want to extract Steem blockchain state. In our example we are querying comments from the @steemitblog account. The result will be the current state object with various information as well as the content property holding the content of the query.\n\nThe following is an example of the returned object:\n\n{\n    \"current_route\":\"/@steemitblog/comments\",\n    \"props\":{\n        \"head_block_number\":22307429,\n        \"head_block_id\":\"01546265c9dc3e761add4c4b652743e3c640fa19\",\n        \"time\":\"2018-05-10T12:15:30\",\n        \"current_witness\":\"smooth.witness\",\n        \"total_pow\":514415,\n        \"num_pow_witnesses\":172,\n        \"virtual_supply\":\"271970374.699 STEEM\",\n        \"current_supply\":\"268140818.508 STEEM\",\n        \"confidential_supply\":\"0.000 STEEM\",\n        \"current_sbd_supply\":\"13342173.771 SBD\",\n        \"confidential_sbd_supply\":\"0.000 SBD\",\n        \"total_vesting_fund_steem\":\"191002132.498 STEEM\",\n        \"total_vesting_shares\":\"388786707656.308148 VESTS\",\n        \"total_reward_fund_steem\":\"0.000 STEEM\",\n        \"total_reward_shares2\":\"0\",\n        \"pending_rewarded_vesting_shares\":\"366359809.533218 VESTS\",\n        \"pending_rewarded_vesting_steem\":\"178575.754 STEEM\",\n        \"sbd_interest_rate\":0,\n        \"sbd_print_rate\":10000,\n        \"maximum_block_size\":65536,\n        \"current_aslot\":22373110,\n        \"recent_slots_filled\":\"340282366920938463463374607431768211455\",\n        \"participation_count\":128,\n        \"last_irreversible_block_num\":22307411,\n        \"vote_power_reserve_rate\":10,\n        \"average_block_size\":14881,\n        \"current_reserve_ratio\":200000000,\n        \"max_virtual_bandwidth\":\"264241152000000000000\"\n    },\n    \"tag_idx\":{\n        \"trending\":[\"\",\"life\",\"photography\",\"steemit\",\"kr\",\"introduceyourself\",\"bitcoin\",\"art\",\"travel\",\"cryptocurrency\",\"spanish\",\"food\",\"steem\",\"blog\",\"funny\",\"news\",\"nature\",\"colorchallenge\",\"dtube\",\"indonesia\",\"story\",\"cn\",\"money\",\"music\",\"writing\",\"crypto\",\"contest\",\"busy\",\"health\",\"poetry\",\"meme\",\"video\",\"utopian-io\",\"photo\",\"new\",\"love\",\"blockchain\",\"deutsch\",\"dmania\",\"science\",\"technology\",\"aceh\",\"entertainment\",\"gaming\",\"politics\",\"myanmar\",\"esteem\",\"sports\",\"fun\",\"tr\"]\n    },\n    \"tags\":{},\n    \"content\":{\n        \"steemitblog/afm007-re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t050215510z\":{\n            \"id\":47669989,\n            \"author\":\"steemitblog\",\n            \"permlink\":\"afm007-re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t050215510z\",\n            \"category\":\"steem\",\n            \"parent_author\":\"afm007\",\n            \"parent_permlink\":\"devportal-update-3-ux-improvements-more-javascript-tutorials-and-more\",\"title\":\"\",\"body\":\"I want to learn the Python language.\",\n            \"json_metadata\":\"{''}\",\n            \"last_update\":\"2018-05-09T05:02:15\",\n            \"created\":\"2018-05-09T05:02:15\",\n            \"active\":\"2018-05-09T05:02:15\",\n            \"last_payout\":\"1970-01-01T00:00:00\",\n            \"depth\":1,\n            \"children\":0,\n            \"net_rshares\":1057692008,\n            \"abs_rshares\":1057692008,\n            \"vote_rshares\":1057692008,\n            \"children_abs_rshares\":0,\n            \"cashout_time\":\"2018-05-16T05:02:15\",\n            \"max_cashout_time\":\"1969-12-31T23:59:59\",\n            \"total_vote_weight\":32523,\n            \"reward_weight\":10000,\n            \"total_payout_value\":\"0.000 SBD\",\n            \"curator_payout_value\":\"0.000 SBD\",\n            \"author_rewards\":0,\n            \"net_votes\":1,\n            \"root_author\":\"steemitblog\",\n            \"root_permlink\":\"devportal-update-3-ux-improvements-more-javascript-tutorials-and-more\",\n            \"max_accepted_payout\":\"1000000.000 SBD\",\n            \"percent_steem_dollars\":10000,\n            \"allow_replies\":true,\n            \"allow_votes\":true,\n            \"allow_curation_rewards\":true,\n            \"beneficiaries\":[],\n            \"url\":\"/steem/@steemitblog/devportal-update-3-ux-improvements-more-javascript-tutorials-and-more#@afm007/afm007-re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t050215510z\",\n            \"root_title\":\"DevPortal Update #3: UX Improvements, More Javascript Tutorials and More!\",\n            \"pending_payout_value\":\"0.005 SBD\",\n            \"total_pending_payout_value\":\"0.000 STEEM\",\n            \"active_votes\":[{\"voter\":\"afm007\",\"weight\":17182,\"rshares\":1057692008,\"percent\":10000,\"reputation\":\"855556264424\",\"time\":\"2018-05-09T05:18:06\"}],\n            \"replies\":[],\n            \"author_reputation\":\"855556264424\",\n            \"promoted\":\"0.000 SBD\",\n            \"body_length\":0,\n            \"reblogged_by\":[]\n        },\n        \"steemitblog/re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t045305223z\":{\n            \"id\":47669080,\n            \"author\":\"steemitblog\",\n            \"permlink\":\"re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t045305223z\",\n            \"category\":\"steem\",\n            \"parent_author\":\"andreina89\",\n            \"parent_permlink\":\"devportal-update-3-ux-improvements-more-javascript-tutorials-and-more\",\n            \"title\":\"\",\n            \"body\":\"Excellent post very interesting friend, thanks\",\n            \"json_metadata\":\"{\\\"tags\\\":[\\\"steem\\\"],\\\"app\\\":\\\"steemit/0.1\\\"}\",\n            \"last_update\":\"2018-05-09T04:53:21\",\n            \"created\":\"2018-05-09T04:53:21\",\n            \"active\":\"2018-05-09T04:53:27\",\n            \"last_payout\":\"1970-01-01T00:00:00\",\n            \"depth\":1,\n            \"children\":1,\n            \"net_rshares\":0,\n            \"abs_rshares\":0,\n            \"vote_rshares\":0,\n            \"children_abs_rshares\":0,\n            \"cashout_time\":\"2018-05-16T04:53:21\",\n            \"max_cashout_time\":\"1969-12-31T23:59:59\",\n            \"total_vote_weight\":0,\n            \"reward_weight\":10000,\n            \"total_payout_value\":\"0.000 SBD\",\n            \"curator_payout_value\":\"0.000 SBD\",\n            \"author_rewards\":0,\n            \"net_votes\":0,\n            \"root_author\":\"steemitblog\",\n            \"root_permlink\":\"devportal-update-3-ux-improvements-more-javascript-tutorials-and-more\",\n            \"max_accepted_payout\":\"1000000.000 SBD\",\n            \"percent_steem_dollars\":10000,\n            \"allow_replies\":true,\n            \"allow_votes\":true,\n            \"allow_curation_rewards\":true,\n            \"beneficiaries\":[],\n            \"url\":\"/steem/@steemitblog/devportal-update-3-ux-improvements-more-javascript-tutorials-and-more#@andreina89/re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t045305223z\",\n            \"root_title\":\"DevPortal Update #3: UX Improvements, More Javascript Tutorials and More!\",\n            \"pending_payout_value\":\"0.000 SBD\",\n            \"total_pending_payout_value\":\"0.000 STEEM\",\n            \"active_votes\":[],\n            \"replies\":[],\n            \"author_reputation\":\"174938588721\",\n            \"promoted\":\"0.000 SBD\",\n            \"body_length\":0,\"reblogged_by\":[]\n        },\n        {\"etc.\":\"etc.\"}\n    },\n    \"accounts\":{\n        \"steemitblog:{\n            \"etc.\":\"etc.\"\n        },\n    },\n    \"witnesses\":{},\n    \"discussion_idx\":{},\n    \"witness_schedule\":{\n        \"id\":0,\n        \"current_virtual_time\":\"326078326927286190874576091\",\n        \"next_shuffle_block_num\":22307439,\n        \"current_shuffled_witnesses\":[\"furion\",\"someguy123\",\"good-karma\",\"blocktrades\",\"smooth.witness\"],\n        \"num_scheduled_witnesses\":21,\n        \"top19_weight\":1,\n        \"timeshare_weight\":5,\n        \"miner_weight\":1,\n        \"witness_pay_normalization_factor\":25,\n        \"median_props\":{\n            \"account_creation_fee\":\"0.100 STEEM\",\n            \"maximum_block_size\":65536,\n            \"sbd_interest_rate\":0\n        },\n        \"majority_version\":\"0.19.3\",\n        \"max_voted_witnesses\":20,\n        \"max_miner_witnesses\":0,\n        \"max_runner_witnesses\":1,\n        \"hardfork_required_witnesses\":17\n    },\n    \"feed_price\":{\n        \"base\":\"3.484 SBD\",\n        \"quote\":\"1.000 STEEM\"\n    },\n    \"error\":\"\"\n}\n\n\n\n3. Formatting\n\nNext we will format the above object properly to view in a simple user interface. From the above object, we are only interested in the content object which holds the data we require.\n\nif (\n    !(\n        Object.keys(result.content).length === 0 &amp;&amp;\n        result.content.constructor === Object\n    )\n) {\n    var comments = [];\n    Object.keys(result.content).forEach(key =&gt; {\n        const comment = result.content[key];\n        const parent_author = comment.parent_author;\n        const parent_permlink = comment.parent_permlink;\n        const created = new Date(comment.created).toDateString();\n        const body = md.render(comment.body);\n        const netvotes = comment.net_votes;\n        comments.push(\n            `&lt;div class=\"list-group-item list-group-item-action flex-column align-items-start\"&gt;\\\n            &lt;div class=\"d-flex w-100 justify-content-between\"&gt;\\\n              &lt;h6 class=\"mb-1\"&gt;@${comment.author}&lt;/h6&gt;\\\n              &lt;small class=\"text-muted\"&gt;${created}&lt;/small&gt;\\\n            &lt;/div&gt;\\\n            &lt;p class=\"mb-1\"&gt;${body}&lt;/p&gt;\\\n            &lt;small class=\"text-muted\"&gt;&amp;#9650; ${netvotes}, Replied to: @${parent_author}/${parent_permlink}&lt;/small&gt;\\\n          &lt;/div&gt;`\n        );\n    });\n    document.getElementById('comments').style.display = 'block';\n    document.getElementById('comments').innerHTML = comments.join('');\n}\n\n\n\nWe first check if content is not an empty object. We then iterate through each object in content and extract:\n\n\n  parent_author\n  parent_permlink\n  and the post or comment the @steemitblog account is replying to\n\n\nWe format created date and time, parse body markdown and get net_votes on that comment.\nEach line is then pushed and displayed separately.\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/09_get_account_comments\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-get-account-replies": {
							"id": "tutorials-javascript-get-account-replies",
							"title": "JS: Get Account Replies",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you would know how to get replies made on particular accounts content",
		  				"type": "",
							"url": "/#tutorials-javascriptget_account_replies",
							"content": "Full, runnable src of Get Account Replies can be downloaded as part of the JS tutorials repository.\n\n\nThe purpose of this tutorial is How to get account replies and a) demonstrate how to use get_state api function call, and b) fetch recent replies for the content of specific account, in this case @steemitblog.\n\nWe focus on listing part of the content with simply UI as well as explain the most commonly used fields from the response object as well as parse body of each comment.\n\nIntro\n\nWe are using get_state function with dsteem, which is straight-forward and this function returns current state of the network as well as additional content given proper query. Each content body, as we described in previous tutorials, is written markdown and submitted to the blockchain by many applications built on top of Steem. For that reason we are using remarkable npm package to parse markdown in a readable format.\n\nSteps\n\n\n  App setup Setup app packages\n  Query result Form a proper query and retrieve result\n  Display replies Parse and display result in user interface\n\n\n1. App setup\n\nAs usual, we have public/app.js file which holds the javascript part of the tutorial. In first few lines we define, configure library and packages.\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\nconst Remarkable = require('remarkable');\nconst md = new Remarkable({ html: true, linkify: true });\n\n\n\ndsteem is pointing to the main network and proper chain_id, addressPrefix and connection server.\nremarkable is assigned to md variable with linkify and html options, allowing markdown parsing links and html properly.\n\n2. Query result\n\nNext, we have main function which fires when page is loaded.\n\n// query string, fetching recent replies for @steemitblog account\nconst query = '/@steemitblog/recent-replies';\n\nclient.database.call('get_state', [query]).then(result =&gt; {\n    // work with state object\n});\n\n\n\nQuery is the path which we want to extract from Steem blockchain state. In our example we are using @steemitblog account and recent-replies to its content. Result will be current state object with various information as well as content object property holding content of the query.\n\nFollowing is example of returned object:\n\n{\n    \"current_route\":\"/@steemitblog/recent-replies\",\n    \"props\":{\n        \"head_block_number\":22307429,\n        \"head_block_id\":\"01546265c9dc3e761add4c4b652743e3c640fa19\",\n        \"time\":\"2018-05-10T12:15:30\",\n        \"current_witness\":\"smooth.witness\",\n        \"total_pow\":514415,\n        \"num_pow_witnesses\":172,\n        \"virtual_supply\":\"271970374.699 STEEM\",\n        \"current_supply\":\"268140818.508 STEEM\",\n        \"confidential_supply\":\"0.000 STEEM\",\n        \"current_sbd_supply\":\"13342173.771 SBD\",\n        \"confidential_sbd_supply\":\"0.000 SBD\",\n        \"total_vesting_fund_steem\":\"191002132.498 STEEM\",\n        \"total_vesting_shares\":\"388786707656.308148 VESTS\",\n        \"total_reward_fund_steem\":\"0.000 STEEM\",\n        \"total_reward_shares2\":\"0\",\n        \"pending_rewarded_vesting_shares\":\"366359809.533218 VESTS\",\n        \"pending_rewarded_vesting_steem\":\"178575.754 STEEM\",\n        \"sbd_interest_rate\":0,\n        \"sbd_print_rate\":10000,\n        \"maximum_block_size\":65536,\n        \"current_aslot\":22373110,\n        \"recent_slots_filled\":\"340282366920938463463374607431768211455\",\n        \"participation_count\":128,\n        \"last_irreversible_block_num\":22307411,\n        \"vote_power_reserve_rate\":10,\n        \"average_block_size\":14881,\n        \"current_reserve_ratio\":200000000,\n        \"max_virtual_bandwidth\":\"264241152000000000000\"\n    },\n    \"tag_idx\":{\n        \"trending\":[\"\",\"life\",\"photography\",\"steemit\",\"kr\",\"introduceyourself\",\"bitcoin\",\"art\",\"travel\",\"cryptocurrency\",\"spanish\",\"food\",\"steem\",\"blog\",\"funny\",\"news\",\"nature\",\"colorchallenge\",\"dtube\",\"indonesia\",\"story\",\"cn\",\"money\",\"music\",\"writing\",\"crypto\",\"contest\",\"busy\",\"health\",\"poetry\",\"meme\",\"video\",\"utopian-io\",\"photo\",\"new\",\"love\",\"blockchain\",\"deutsch\",\"dmania\",\"science\",\"technology\",\"aceh\",\"entertainment\",\"gaming\",\"politics\",\"myanmar\",\"esteem\",\"sports\",\"fun\",\"tr\"]\n    },\n    \"tags\":{},\n    \"content\":{\n        \"afm007/afm007-re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t050215510z\":{\n            \"id\":47669989,\n            \"author\":\"afm007\",\n            \"permlink\":\"afm007-re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t050215510z\",\n            \"category\":\"steem\",\n            \"parent_author\":\"steemitblog\",\n            \"parent_permlink\":\"devportal-update-3-ux-improvements-more-javascript-tutorials-and-more\",\"title\":\"\",\"body\":\"I want to learn the Python language.\",\n            \"json_metadata\":\"{''}\",\n            \"last_update\":\"2018-05-09T05:02:15\",\n            \"created\":\"2018-05-09T05:02:15\",\n            \"active\":\"2018-05-09T05:02:15\",\n            \"last_payout\":\"1970-01-01T00:00:00\",\n            \"depth\":1,\n            \"children\":0,\n            \"net_rshares\":1057692008,\n            \"abs_rshares\":1057692008,\n            \"vote_rshares\":1057692008,\n            \"children_abs_rshares\":0,\n            \"cashout_time\":\"2018-05-16T05:02:15\",\n            \"max_cashout_time\":\"1969-12-31T23:59:59\",\n            \"total_vote_weight\":32523,\n            \"reward_weight\":10000,\n            \"total_payout_value\":\"0.000 SBD\",\n            \"curator_payout_value\":\"0.000 SBD\",\n            \"author_rewards\":0,\n            \"net_votes\":1,\n            \"root_author\":\"steemitblog\",\n            \"root_permlink\":\"devportal-update-3-ux-improvements-more-javascript-tutorials-and-more\",\n            \"max_accepted_payout\":\"1000000.000 SBD\",\n            \"percent_steem_dollars\":10000,\n            \"allow_replies\":true,\n            \"allow_votes\":true,\n            \"allow_curation_rewards\":true,\n            \"beneficiaries\":[],\n            \"url\":\"/steem/@steemitblog/devportal-update-3-ux-improvements-more-javascript-tutorials-and-more#@afm007/afm007-re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t050215510z\",\n            \"root_title\":\"DevPortal Update #3: UX Improvements, More Javascript Tutorials and More!\",\n            \"pending_payout_value\":\"0.005 SBD\",\n            \"total_pending_payout_value\":\"0.000 STEEM\",\n            \"active_votes\":[{\"voter\":\"afm007\",\"weight\":17182,\"rshares\":1057692008,\"percent\":10000,\"reputation\":\"855556264424\",\"time\":\"2018-05-09T05:18:06\"}],\n            \"replies\":[],\n            \"author_reputation\":\"855556264424\",\n            \"promoted\":\"0.000 SBD\",\n            \"body_length\":0,\n            \"reblogged_by\":[]\n        },\n        \"andreina89/re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t045305223z\":{\n            \"id\":47669080,\n            \"author\":\"andreina89\",\n            \"permlink\":\"re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t045305223z\",\n            \"category\":\"steem\",\n            \"parent_author\":\"steemitblog\",\n            \"parent_permlink\":\"devportal-update-3-ux-improvements-more-javascript-tutorials-and-more\",\n            \"title\":\"\",\n            \"body\":\"Excellent post very interesting friend, thanks\",\n            \"json_metadata\":\"{\\\"tags\\\":[\\\"steem\\\"],\\\"app\\\":\\\"steemit/0.1\\\"}\",\n            \"last_update\":\"2018-05-09T04:53:21\",\n            \"created\":\"2018-05-09T04:53:21\",\n            \"active\":\"2018-05-09T04:53:27\",\n            \"last_payout\":\"1970-01-01T00:00:00\",\n            \"depth\":1,\n            \"children\":1,\n            \"net_rshares\":0,\n            \"abs_rshares\":0,\n            \"vote_rshares\":0,\n            \"children_abs_rshares\":0,\n            \"cashout_time\":\"2018-05-16T04:53:21\",\n            \"max_cashout_time\":\"1969-12-31T23:59:59\",\n            \"total_vote_weight\":0,\n            \"reward_weight\":10000,\n            \"total_payout_value\":\"0.000 SBD\",\n            \"curator_payout_value\":\"0.000 SBD\",\n            \"author_rewards\":0,\n            \"net_votes\":0,\n            \"root_author\":\"steemitblog\",\n            \"root_permlink\":\"devportal-update-3-ux-improvements-more-javascript-tutorials-and-more\",\n            \"max_accepted_payout\":\"1000000.000 SBD\",\n            \"percent_steem_dollars\":10000,\n            \"allow_replies\":true,\n            \"allow_votes\":true,\n            \"allow_curation_rewards\":true,\n            \"beneficiaries\":[],\n            \"url\":\"/steem/@steemitblog/devportal-update-3-ux-improvements-more-javascript-tutorials-and-more#@andreina89/re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t045305223z\",\n            \"root_title\":\"DevPortal Update #3: UX Improvements, More Javascript Tutorials and More!\",\n            \"pending_payout_value\":\"0.000 SBD\",\n            \"total_pending_payout_value\":\"0.000 STEEM\",\n            \"active_votes\":[],\n            \"replies\":[],\n            \"author_reputation\":\"174938588721\",\n            \"promoted\":\"0.000 SBD\",\n            \"body_length\":0,\"reblogged_by\":[]\n        },\n        {\"etc.\":\"etc.\"}\n    },\n    \"accounts\":{\n        \"afm007/afm007-re-steemitblog-devportal-update-3-ux-improvements-more-javascript-tutorials-and-more-20180509t050215510z\":{\n            {\"etc.\":\"etc.\"}\n        },\n    },\n    \"witnesses\":{},\n    \"discussion_idx\":{},\n    \"witness_schedule\":{\n        \"id\":0,\n        \"current_virtual_time\":\"326078326927286190874576091\",\n        \"next_shuffle_block_num\":22307439,\n        \"current_shuffled_witnesses\":[\"furion\",\"someguy123\",\"good-karma\",\"blocktrades\",\"smooth.witness\"],\n        \"num_scheduled_witnesses\":21,\n        \"top19_weight\":1,\n        \"timeshare_weight\":5,\n        \"miner_weight\":1,\n        \"witness_pay_normalization_factor\":25,\n        \"median_props\":{\n            \"account_creation_fee\":\"0.100 STEEM\",\n            \"maximum_block_size\":65536,\n            \"sbd_interest_rate\":0\n        },\n        \"majority_version\":\"0.19.3\",\n        \"max_voted_witnesses\":20,\n        \"max_miner_witnesses\":0,\n        \"max_runner_witnesses\":1,\n        \"hardfork_required_witnesses\":17\n    },\n    \"feed_price\":{\n        \"base\":\"3.484 SBD\",\n        \"quote\":\"1.000 STEEM\"\n    },\n    \"error\":\"\"\n}\n\n\n\n3. Display replies\n\nNext we will format above object properly in simple user interface. From above object, we are only interested in content object which holds the data we queried.\n\nif (\n    !(\n        Object.keys(result.content).length === 0 &amp;&amp;\n        result.content.constructor === Object\n    )\n) {\n    var replies = [];\n    Object.keys(result.content).forEach(key =&gt; {\n        const reply = result.content[key];\n        const author = reply.author;\n        const created = new Date(reply.created).toDateString();\n        const body = md.render(reply.body);\n        const netvotes = reply.net_votes;\n        replies.push(\n            `&lt;div class=\"list-group-item list-group-item-action flex-column align-items-start\"&gt;\\\n                &lt;div class=\"d-flex w-100 justify-content-between\"&gt;\\\n                  &lt;h5 class=\"mb-1\"&gt;@${author}&lt;/h5&gt;\\\n                  &lt;small class=\"text-muted\"&gt;${created}&lt;/small&gt;\\\n                &lt;/div&gt;\\\n                &lt;p class=\"mb-1\"&gt;${body}&lt;/p&gt;\\\n                &lt;small class=\"text-muted\"&gt;&amp;#9650; ${netvotes}&lt;/small&gt;\\\n              &lt;/div&gt;`\n        );\n    });\n    document.getElementById('replies').style.display = 'block';\n    document.getElementById('replies').innerHTML = replies.join('');\n}\n\n\n\nWe check if content is not an empty object and we iterate through each object via its key and extract, author, format created date and time, parse body markdown, get net_votes on that reply. Pushing each list item separately and displaying it. That’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/08_get_account_replies\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-get-follower-and-following-list": {
							"id": "tutorials-javascript-get-follower-and-following-list",
							"title": "JS: Get Follower And Following List",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to create a list of followers and users that you are following",
		  				"type": "",
							"url": "/#tutorials-javascriptget_follower_and_following_list",
							"content": "Full, runnable src of Get Follower And Following List can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will take you through the process of calling both the follower and following functions from the STEEM API.\n\nIntro\n\nWe are using the call operation provided by the dsteem library to pull the follow information for a specified user account. There are 4 variables required to execute this operation:\n\n\n  username - The specific user for which the follower(ing) list will be retrieved.\n  startFollower(ing) - The starting letter(s) or name for the search query.\n  followType - This value is set to blog and includes all users following or being followed by the user.\n  limit - The maximum number of lines to be returned by the query.\n\n\nA simple HTML interface is used to capture the required information after which the function is executed.\n\nSteps\n\n\n  Configure connection Configuration of dsteem to communicate with the Steem blockchain\n  Input variables Collecting the required inputs via an HTML UI\n  Get followers/following Get the followers or users being followed\n  Display Display the array of results on the UI\n\n\n1. Configure connection\n\nAs usual, we have a public/app.js file which holds the Javascript segment of the tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//define network parameters\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to a steem node, production in this case\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\nAbove, we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint.\n\n2. Input variables\n\nThe required parameters for the follow operation is recorded via an HTML UI that can be found in the public/index.html file. The values have been pre-populated for ease of use but are editable.\n\nThe parameter values are allocated as seen below once the user clicks on the “Get Followers” or “Get Following” button.\nThe two queries are very similar and run from two different functions activated from a button on the UI. The first line of both functions is used to clear the display before new information is queried.\n\n//Followers function\nwindow.submitFollower = async () =&gt; {\n    //clear list\n    document.getElementById('followList').innerHTML = '';\n    \n    //get user name\n    const username = document.getElementById('username').value;\n    //get starting letters / word\n    const startFollow = document.getElementById('startFollow').value;\n    //get limit\n    var limit = document.getElementById('limit').value;\n\n\n\n3. Get followers/following\n\nA list of followers or users being followed is called from the database with the follow_api available in the SteemJS library.\n\n//get list of followers\n//getFollowers(following, startFollower, followType, limit)\n    let followlist = await client.call('follow_api', 'get_followers', [\n        username,\n        startFollow,\n        'blog',\n        limit,\n    ]);\n\n    document.getElementById('followResultContainer').style.display = 'flex';\n    document.getElementById('followResult').className = 'form-control-plaintext alert alert-success';\n    document.getElementById('followResult').innerHTML = 'Followers';\n\n\n//get list of authors you are following\n//getFollowing(follower, startFollowing, followType, limit)\n    let followlist = await client.call('follow_api', 'get_following', [\n        username,\n        startFollow,\n        'blog',\n        limit,\n    ]);\n\n    document.getElementById('followResultContainer').style.display = 'flex';\n    document.getElementById('followResult').className = 'form-control-plaintext alert alert-success';\n    document.getElementById('followResult').innerHTML = 'Following';\n  \n\n\n\n4. Display\n\nThe result returned from the query is an array of objects. The follower(ing) value from that array is displayed on both the UI and the console via a simple forEach array method.\n\n    followlist.forEach((newObj) =&gt; {\n        name = newObj.follower;\n        document.getElementById('followList').innerHTML += name + '&lt;br&gt;';\n        console.log(name);\n    });\n\n\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/19_get_follower_and_following_list\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-get-post-comments": {
							"id": "tutorials-javascript-get-post-comments",
							"title": "JS: Get Post Comments",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you would know how to get comments made by others on any post",
		  				"type": "",
							"url": "/#tutorials-javascriptget_post_comments",
							"content": "Full, runnable src of Get Post Comments can be downloaded as part of the JS tutorials repository.\n\n\nThe purpose of this tutorial is to a) demonstrate how to get a list of articles from the trending list on the blockchain, and b) fetch the contents of the selected post to display its title and body and c) fetch comments of the post and display them with author, body, created time and number of votes.\n\nWe will also explain the most commonly used fields from the response object as well as parse body of each comment.\n\nIntro\n\nEach post might have comments/replies that is interesting and contributes to the topic and discussion. Steem offers out of box API for pulling replies for particular post with get_content_replies. We will fetch replies and list them in simple user interface.\n\nSteps\n\n\n  Fetching posts Getting trending posts\n  Post comments Open post and fetch comments\n  Query result Result of the query\n\n\n1. Fetching post\n\nAs mentioned in our previous tutorials we can fetch various lists of posts with different filters. Here, we are reusing some parts of that tutorial to list the top 5 trending posts. And we parse content of selected post to display few fields in a meaningful way.\n\n2. Post comments\n\nOn selection of a particular post from the list, openPost function is fired as it is explained in Get Post Details tutorial. This function will call the get_content function to fetch content of the post. Right after root post is displayed properly, we use get_content_replies function to fetch comments made on that post, function requires author and permlink of the root post to fetch its comments.\n\nclient.database.call('get_content_replies', [author, permlink]).then(result =&gt; {\n    const comments = [];\n    for (var i = 0; i &lt; result.length; i++) {\n        comments.push(\n            `&lt;div class=\"list-group-item list-group-item-action flex-column align-items-start\"&gt;\\\n            &lt;div class=\"d-flex w-100 justify-content-between\"&gt;\\\n              &lt;h5 class=\"mb-1\"&gt;@${result[i].author}&lt;/h5&gt;\\\n              &lt;small class=\"text-muted\"&gt;${new Date(\n                  result[i].created\n              ).toString()}&lt;/small&gt;\\\n            &lt;/div&gt;\\\n            &lt;p class=\"mb-1\"&gt;${md.render(result[i].body)}&lt;/p&gt;\\\n            &lt;small class=\"text-muted\"&gt;&amp;#9650; ${result[i].net_votes}&lt;/small&gt;\\\n          &lt;/div&gt;`\n        );\n    }\n\n    document.getElementById('postComments').style.display = 'block';\n    document.getElementById('postComments').innerHTML = comments.join('');\n});\n\n\n\nWe iterate each comment and format them properly in comments array. As mentioned in Get Post Details tutorial, we use remarkable library to parse the body of each comment into a readable format. Author, comment body, created time and number of votes on that comment is displayed with simple user interface.\n\ndocument.getElementById('postList').style.display = 'block';\ndocument.getElementById('postBody').style.display = 'none';\ndocument.getElementById('postComments').style.display = 'none';\n\n\n\nThe “go back” function simply hides and shows the post list.\n\n3. Query result\n\nThe result is returned from the post content as a JSON object with the following properties:\n\n[\n    {\n        \"id\": 37338948,\n        \"author\": \"demo\",\n        \"permlink\": \"re-join-team-steemit-at-tokenfest-20180500t181413163z\",\n        \"category\": \"steemit\",\n        \"parent_author\": \"steemit\",\n        \"parent_permlink\": \"join-team-steemit-at-tokenfest\",\n        \"title\": \"\",\n        \"body\": \"Thank you for sharing\",\n        \"json_metadata\":\n            \"{\\\"tags\\\":[\\\"steemit\\\"],\\\"app\\\":\\\"steemit/0.1\\\",\\\"format\\\":\\\"markdown\\\"}\",\n        \"last_update\": \"2018-03-07T23:22:54\",\n        \"created\": \"2018-05-00T20:56:36\",\n        \"active\": \"2018-05-06T01:40:21\",\n        \"last_payout\": \"1970-01-01T00:00:00\",\n        \"depth\": 1,\n        \"children\": 1,\n        \"net_rshares\": \"11453442114933\",\n        \"abs_rshares\": \"11454054795840\",\n        \"vote_rshares\": \"11454054795840\",\n        \"children_abs_rshares\": \"13568695606090\",\n        \"cashout_time\": \"2018-05-07T20:56:36\",\n        \"max_cashout_time\": \"1969-12-31T23:59:59\",\n        \"total_vote_weight\": 3462435,\n        \"reward_weight\": 10000,\n        \"total_payout_value\": \"0.000 SBD\",\n        \"curator_payout_value\": \"0.000 SBD\",\n        \"author_rewards\": 0,\n        \"net_votes\": 77,\n        \"root_comment\": 37338948,\n        \"max_accepted_payout\": \"0.000 SBD\",\n        \"percent_steem_dollars\": 10000,\n        \"allow_replies\": true,\n        \"allow_votes\": true,\n        \"allow_curation_rewards\": true,\n        \"beneficiaries\": [],\n        \"url\":\n            \"/steemit/@steemitblog/join-team-steemit-at-tokenfest#@demo/re-join-team-steemit-at-tokenfest-20180500t181413163z\",\n        \"root_title\": \"Join Team Steemit at TokenFest!\",\n        \"pending_payout_value\": \"0.436 SBD\",\n        \"total_pending_payout_value\": \"0.000 STEEM\",\n        \"active_votes\": [\n            {\n                \"voter\": \"steemitblog\",\n                \"weight\": 0,\n                \"rshares\": \"1870813909383\",\n                \"percent\": 10000,\n                \"reputation\": \"128210130644387\",\n                \"time\": \"2018-03-07T20:56:36\"\n            },\n            {\n                \"voter\": \"kevinwong\",\n                \"weight\": 526653,\n                \"rshares\": \"2208942520687\",\n                \"percent\": 5000,\n                \"reputation\": \"374133832002581\",\n                \"time\": \"2018-03-08T04:27:00\"\n            }\n        ],\n        \"replies\": [],\n        \"author_reputation\": \"128210130644387\",\n        \"promoted\": \"0.000 SBD\",\n        \"body_length\": 0,\n        \"reblogged_by\": []\n    },\n    {\n        \"id\": 37338987,\n        \"etc.\": \"etc\"\n    }\n]\n\n\n\nFrom this result, you have access to comments made on selected post.\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/07_get_post_comments\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-get-post-details": {
							"id": "tutorials-javascript-get-post-details",
							"title": "JS: Get Post Details",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you would know how to get post details and use them appropriately",
		  				"type": "",
							"url": "/#tutorials-javascriptget_post_details",
							"content": "Full, runnable src of Get Post Details can be downloaded as part of the JS tutorials repository.\n\n\nThe purpose of this tutorial is to a) demonstrate how to get a list of articles from the trending list on the blockchain, and b) fetch the contents of the selected post to display its title and body.\n\nWe will also explain the most commonly used fields from the response object as well as parse body of the post.\n\nIntro\n\nAccounts have unique permlink - permanent link for each of their posts. And Steem blockchain provides API to directly fetch current state of the post and its details. We will be using get_content to retrieve additional details. We can easily reformat data in a way that fits out application.\n\nSteps\n\n\n  Fetching posts Trending posts list\n  Post content Extract content of the selected post\n  Query result Returned data\n\n\n1. Fetching posts\n\nAs mentioned in our previous tutorial we can fetch various lists of posts with different filters. Here, we are reusing some parts of that tutorial to list the top 5 trending posts.\n\nvar query = {\n    tag: '', // This tag is used to filter the results by a specific post tag.\n    limit: 5, // This allows us to limit the total to 5 items.\n    truncate_body: 1, // This will truncate the body of each post to 1 character, which is useful if you want to work with lighter array.\n};\n\n\n\n2. Post content\n\nOn selection of a particular post from the list, openPost function is fired. This function will call the get_content function to fetch content of the post. get_content requires author and permlink of the post to fetch its data.\n\nclient.database.call('get_content', [author, permlink]).then(result =&gt; {\n    const md = new Remarkable({ html: true, linkify: true });\n\n    const body = md.render(result.body);\n\n    const content = `&lt;div class='pull-right'&gt;&lt;button onclick=goback()&gt;Close&lt;/button&gt;&lt;/div&gt;&lt;br&gt;&lt;h2&gt;${\n        result.title\n    }&lt;/h2&gt;&lt;br&gt;${body}&lt;br&gt;`;\n\n    document.getElementById('postList').style.display = 'none';\n    document.getElementById('postBody').style.display = 'block';\n    document.getElementById('postBody').innerHTML = content;\n});\n\n\n\nSteem allows any text-based format for the body, but apps often follow standard markdown with mix of few html tags. After we have fetched the content, we can use the remarkable library to parse the body of the post into a readable format. The title and body of the post are then displayed with a button at the top right corner to switch back to the post list.\n\ndocument.getElementById('postList').style.display = 'block';\ndocument.getElementById('postBody').style.display = 'none';\n\n\n\nThe “go back” function simply hides and shows the post list.\n\n3. Query result\n\nThe result is returned from the post content as a JSON object with the following properties:\n\n{\n    \"id\": 37338948,\n    \"author\": \"steemitblog\",\n    \"permlink\": \"join-team-steemit-at-tokenfest\",\n    \"category\": \"steemit\",\n    \"parent_author\": \"\",\n    \"parent_permlink\": \"steemit\",\n    \"title\": \"Join Team Steemit at TokenFest!\",\n    \"body\":\n        \"&lt;a href=\\\"https://tokenfest.adria.digital\\\"&gt;&lt;img src=\\\"https://i.imgur.com/fOScDIW.png\\\"/&gt;&lt;/a&gt;\\n\\nHello Steemians! If you’d like to meet Team Steemit live-in-person, or are just interested in attending what promises to be a great blockchain conference, join us at &lt;a href=\\\"https://tokenfest.adria.digital/\\\"&gt;TokenFest&lt;/a&gt; in San Francisco from March 15th to 16th. \\n\\nSteemit CEO, Ned Scott, will be participating in a fireside chat alongside Steemit’s CTO, Harry Schmidt, as well as the creator of Utopian.io, Diego Pucci. Steemit will also be hosting the opening party on Thursday night and we’d certainly love to meet as many of you as possible IRL, so head on over to https://tokenfest.adria.digital/ and get your tickets while you can. \\n\\n*Team Steemit*\",\n    \"json_metadata\":\n        \"{\\\"tags\\\":[\\\"steemit\\\",\\\"tokenfest\\\",\\\"conference\\\"],\\\"image\\\":[\\\"https://i.imgur.com/fOScDIW.png\\\"],\\\"links\\\":[\\\"https://tokenfest.adria.digital\\\",\\\"https://tokenfest.adria.digital/\\\"],\\\"app\\\":\\\"steemit/0.1\\\",\\\"format\\\":\\\"markdown\\\"}\",\n    \"last_update\": \"2018-03-07T23:22:54\",\n    \"created\": \"2018-03-07T20:56:36\",\n    \"active\": \"2018-03-13T01:40:21\",\n    \"last_payout\": \"1970-01-01T00:00:00\",\n    \"depth\": 0,\n    \"children\": 29,\n    \"net_rshares\": \"11453442114933\",\n    \"abs_rshares\": \"11454054795840\",\n    \"vote_rshares\": \"11454054795840\",\n    \"children_abs_rshares\": \"13568695606090\",\n    \"cashout_time\": \"2018-03-14T20:56:36\",\n    \"max_cashout_time\": \"1969-12-31T23:59:59\",\n    \"total_vote_weight\": 3462435,\n    \"reward_weight\": 10000,\n    \"total_payout_value\": \"0.000 SBD\",\n    \"curator_payout_value\": \"0.000 SBD\",\n    \"author_rewards\": 0,\n    \"net_votes\": 77,\n    \"root_comment\": 37338948,\n    \"max_accepted_payout\": \"0.000 SBD\",\n    \"percent_steem_dollars\": 10000,\n    \"allow_replies\": true,\n    \"allow_votes\": true,\n    \"allow_curation_rewards\": true,\n    \"beneficiaries\": [],\n    \"url\": \"/steemit/@steemitblog/join-team-steemit-at-tokenfest\",\n    \"root_title\": \"Join Team Steemit at TokenFest!\",\n    \"pending_payout_value\": \"46.436 SBD\",\n    \"total_pending_payout_value\": \"0.000 STEEM\",\n    \"active_votes\": [\n        {\n            \"voter\": \"steemitblog\",\n            \"weight\": 0,\n            \"rshares\": \"1870813909383\",\n            \"percent\": 10000,\n            \"reputation\": \"128210130644387\",\n            \"time\": \"2018-03-07T20:56:36\"\n        },\n        {\n            \"voter\": \"kevinwong\",\n            \"weight\": 526653,\n            \"rshares\": \"2208942520687\",\n            \"percent\": 5000,\n            \"reputation\": \"374133832002581\",\n            \"time\": \"2018-03-08T04:27:00\"\n        }\n    ],\n    \"replies\": [],\n    \"author_reputation\": \"128210130644387\",\n    \"promoted\": \"0.000 SBD\",\n    \"body_length\": 754,\n    \"reblogged_by\": []\n}\n\n\n\nFrom this result, you have access to everything associated with the selected post, including additional metadata which is a JSON string that must be decoded to use.\n\n\n  id - Unique identifier that is mostly an implementation detail (best to ignore). To uniquely identify content, it’s best to use author/permlink.\n  author - The author account name of the content.\n  permlink - Permanent link of the content, must be unique in the scope of the author.\n  category - The main category/tag this content belongs to.\n  parent_author - Parent author, in case this content is a comment (reply).\n  parent_permlink - Parent permanent link, this will be the same as category for posts and will contain the permlink of the content being replied to in the case of a comment.\n  title - Title of the content.\n  body - Body of the content.\n  json_metadata - JSON metadata that holds extra information about the content. Note: The format for this field is not guaranteed to be valid JSON.\n  last_update - The date and time of the last update to this content.\n  created - The date and time this content was created.\n  active - The last time this content was “touched” by voting or reply.\n  last_payout - Time of last payout.\n  depth - Used to track max nested depth.\n  children - Used to track the total number of children, grandchildren, etc. …\n  net_rshares - Reward is proportional to liniar rshares, this is the sum of all votes (positive and negative reward sum)\n  abs_rshares - This was used to track the total absolute weight of votes for the purpose of calculating cashout_time.\n  vote_rshares - Total positive rshares from all votes. Used to calculate delta weights. Needed to handle vote changing and removal.\n  children_abs_rshares - This was used to calculate cashout time of a discussion.\n  cashout_time - 7 days from the created date.\n  max_cashout_time - Unused.\n  total_vote_weight - The total weight of voting rewards, used to calculate pro-rata share of curation payouts.\n  reward_weight - Weight/percent of reward.\n  total_payout_value - Tracks the total payout this content has received over time, measured in the debt asset.\n  curator_payout_value - Tracks the curator payout this content has received over time, measured in the debt asset.\n  author_rewards - Tracks the author payout this content has received over time, measured in the debt asset.\n  net_votes - Net positive votes\n  root_comment - ID of the original content.\n  max_accepted_payout - Value of the maximum payout this content will receive.\n  percent_steem_dollars - The percent of Steem Dollars to key, unkept amounts will be received as STEEM Power.\n  allow_replies - Allows content to disable replies.\n  allow_votes - Allows content to receive votes.\n  allow_curation_rewards - Allows curators of this content receive rewards.\n  beneficiaries - The list of up to 8 beneficiary accounts for this content as well as the percentage of the author reward they will receive in STEEM Power.\n  url - The end of the url to this content.\n  root_title - Title of the original content (useful in replies).\n  pending_payout_value - Pending payout amount if 7 days has not yet elapsed.\n  total_pending_payout_value - Total pending payout amount if 7 days has not yet elapsed.\n  active_votes - The entire voting list array, including upvotes, downvotes, and unvotes; used to calculate net_votes.\n  replies - Unused.\n  author_reputation - Author’s reputation.\n  promoted - If post is promoted, how much has been spent on promotion.\n  body_length - Total content length.\n  reblogged_by - Unused.\n\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/05_get_post_details\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-get-posts": {
							"id": "tutorials-javascript-get-posts",
							"title": "JS: Get Posts",
							"category": "tutorials-javascript",
							"description": "Query for the most recent posts having a specific tag using a Steem filter",
		  				"type": "",
							"url": "/#tutorials-javascriptget_posts",
							"content": "Full, runnable src of Get Posts can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial pulls a list of the posts from different tags or filters and displays them.\nTags and filters are different. It’s important to understand them.\n\nIntro\n\nTags &amp; Filters are two different.\n\nA tag in Steem is much like a tag in Gmail, or Twitter. It’s a way to describe a\npost as being relevant to a particular topic. Posts may have up to five tags on them, but there are limits when\nquerying (more on this later).\n\nA filter in Steem is a kind of built-in ‘view’ or ordering of posts. You can use the following filters:\ntrending, hot, new, active, and promoted. You’ll get a feel for the subtleties of each as you create your\napplication.\n\nSteps\n\n\n  UI - A brief description of the UI and inputting our query values\n  Construct query - Assemble the information from the UI into our filter &amp; query\n  API call - Make the call to Steem\n  Handle response - Accept the response in a promise callback, then render the results\n  Example post object - An example post object from the response list\n\n\n1. UI \n\nThe source HTML for our UI can be found in public/index.html\n\nThere are three input components to the UI.\n\n\n  \n    Filters: where we select one of the five built in filter types.\n\n    &lt;select id=\"filters\" class=\"form-control\" &gt;...\n  \n  \n    Tag: where we type in a single, arbitrary tag. (The Steem blockchain does not support searching on multiple tags)\n\n    &lt;input id=\"tag\" class=\"form-control\"/&gt;\n  \n  \n    Get Posts: It’s a button. You click it, and we move on to assembling our post.\n&lt;button class=\"btn btn-primary\" onclick=\"getPosts()\"&gt;Get Posts&lt;/button&gt;\n  \n\n\n\n\n2. Construct query \n\nThe filter and query are constructed within the async, globally available function getPosts\n\nThe limit property you see below limits the total number of posts we’ll get back to something\nmanagable. In this case, five.\n\nconst filter = document.getElementById('filters').value;\nconst query = {\n    tag: document.getElementById('tag').value,\n    limit: 5,\n};\n\n\n\n3. API call \n\nThe api call itself is fairly simple. We use getDiscussions.\nThe first argument, filter, is a simple string.\nThe second argument is our query object.\nLike most of dsteem’s api functions, getDiscussions returns a Promise.\n\nclient.database\n    .getDiscussions(filter, query)\n    .th..\n\n\n\n4. Handle response \n\nWhen the promise returned by getDiscussions completes successfully, the function we pass to .then()\niterates over the entries response, and constructs html from it.\n\n...ery)\n.then(result =&gt; {\n            console.log(\"Response received:\", result);\n            if (result) {\n                var posts = [];\n                result.forEach(post =&gt; {\n                    const json = JSON.parse(post.json_metadata);\n                    const image = json.image ? json.image[0] : '';\n                    const title = post.title;\n                    const author = post.author;\n                    const created = new Date(post.created).toDateString();\n                    posts.push(\n                        `&lt;div class=\"list-group-item\"&gt;&lt;h4 class=\"list-group-item-heading\"&gt;${title}&lt;/h4&gt;&lt;p&gt;by ${author}&lt;/p&gt;&lt;center&gt;&lt;img src=\"${image}\" class=\"img-responsive center-block\" style=\"max-width: 450px\"/&gt;&lt;/center&gt;&lt;p class=\"list-group-item-text text-right text-nowrap\"&gt;${created}&lt;/p&gt;&lt;/div&gt;`\n                    );\n                });\n\n                document.getElementById('postList').innerHTML = posts.join('');\n            } else {\n                document.getElementById('postList').innerHTML = \"No result.\";\n            }\n        })\n\n\n\n5. Example post object \n\nThe result returned from the service is a JSON list. This is an example list with one entry.\n\n[\n    {\n        \"id\": 37338948,\n        \"author\": \"steemitblog\",\n        \"permlink\": \"join-team-steemit-at-tokenfest\",\n        \"category\": \"steemit\",\n        \"parent_author\": \"\",\n        \"parent_permlink\": \"steemit\",\n        \"title\": \"Join Team Steemit at TokenFest!\",\n        \"body\":\n            \"&lt;a href=\\\"https://tokenfest.adria.digital\\\"&gt;&lt;img src=\\\"https://i.imgur.com/fOScDIW.png\\\"/&gt;&lt;/a&gt;\\n\\nHello Steemians! If you’d like to meet Team Steemit live-in-person, or are just interested in attending what promises to be a great blockchain conference, join us at &lt;a href=\\\"https://tokenfest.adria.digital/\\\"&gt;TokenFest&lt;/a&gt; in San Francisco from March 15th to 16th. \\n\\nSteemit CEO, Ned Scott, will be participating in a fireside chat alongside Steemit’s CTO, Harry Schmidt, as well as the creator of Utopian.io, Diego Pucci. Steemit will also be hosting the opening party on Thursday night and we’d certainly love to meet as many of you as possible IRL, so head on over to https://tokenfest.adria.digital/ and get your tickets while you can. \\n\\n*Team Steemit*\",\n        \"json_metadata\":\n            \"{\\\"tags\\\":[\\\"steemit\\\",\\\"tokenfest\\\",\\\"conference\\\"],\\\"image\\\":[\\\"https://i.imgur.com/fOScDIW.png\\\"],\\\"links\\\":[\\\"https://tokenfest.adria.digital\\\",\\\"https://tokenfest.adria.digital/\\\"],\\\"app\\\":\\\"steemit/0.1\\\",\\\"format\\\":\\\"markdown\\\"}\",\n        \"last_update\": \"2018-03-07T23:22:54\",\n        \"created\": \"2018-03-07T20:56:36\",\n        \"active\": \"2018-03-13T01:40:21\",\n        \"last_payout\": \"1970-01-01T00:00:00\",\n        \"depth\": 0,\n        \"children\": 29,\n        \"net_rshares\": \"11453442114933\",\n        \"abs_rshares\": \"11454054795840\",\n        \"vote_rshares\": \"11454054795840\",\n        \"children_abs_rshares\": \"13568695606090\",\n        \"cashout_time\": \"2018-03-14T20:56:36\",\n        \"max_cashout_time\": \"1969-12-31T23:59:59\",\n        \"total_vote_weight\": 3462435,\n        \"reward_weight\": 10000,\n        \"total_payout_value\": \"0.000 SBD\",\n        \"curator_payout_value\": \"0.000 SBD\",\n        \"author_rewards\": 0,\n        \"net_votes\": 77,\n        \"root_comment\": 37338948,\n        \"max_accepted_payout\": \"0.000 SBD\",\n        \"percent_steem_dollars\": 10000,\n        \"allow_replies\": true,\n        \"allow_votes\": true,\n        \"allow_curation_rewards\": true,\n        \"beneficiaries\": [],\n        \"url\": \"/steemit/@steemitblog/join-team-steemit-at-tokenfest\",\n        \"root_title\": \"Join Team Steemit at TokenFest!\",\n        \"pending_payout_value\": \"46.436 SBD\",\n        \"total_pending_payout_value\": \"0.000 STEEM\",\n        \"active_votes\": [\n            {\n                \"voter\": \"steemitblog\",\n                \"weight\": 0,\n                \"rshares\": \"1870813909383\",\n                \"percent\": 10000,\n                \"reputation\": \"128210130644387\",\n                \"time\": \"2018-03-07T20:56:36\"\n            },\n            {\n                \"voter\": \"kevinwong\",\n                \"weight\": 526653,\n                \"rshares\": \"2208942520687\",\n                \"percent\": 5000,\n                \"reputation\": \"374133832002581\",\n                \"time\": \"2018-03-08T04:27:00\"\n            }\n        ],\n        \"replies\": [],\n        \"author_reputation\": \"128210130644387\",\n        \"promoted\": \"0.000 SBD\",\n        \"body_length\": 754,\n        \"reblogged_by\": []\n    }\n    ...\n]\n\n\n\nAnd that’s all there is to getting top-level posts. See Get post comments for getting comments\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/04_get_posts\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-get-voters-list-on-post": {
							"id": "tutorials-javascript-get-voters-list-on-post",
							"title": "JS: Get Voters List On Post",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you would know how to get voters list on any content",
		  				"type": "",
							"url": "/#tutorials-javascriptget_voters_list_on_post",
							"content": "Full, runnable src of Get Voters List On Post can be downloaded as part of the JS tutorials repository.\n\n\nThe purpose of this tutorial is to a) demonstrate how to get a list of articles from the trending list on the blockchain, and b) fetch the voters of the selected post to display the account and date at which they voted.\n\nWe will also explain the most commonly used fields from the response object.\n\nIntro\n\nEach post has voters that support content and play big role in reward distribution. Getting details of each voter and their vote value, time, etc. is another crucial information for authors and app developers. We will be using get_active_votes API call to retrieve that information right from Steem blockchain.\n\nSteps\n\n\n  Fetching posts Get trending post list\n  Voter information Voters information on selected post\n  Query result Example of result from query\n\n\n1. Fetching posts\n\nAs mentioned in our previous tutorial we can fetch various lists of posts with different filters. Here, we are reusing some parts of that tutorial to list the top 5 trending posts.\n\nvar query = {\n    tag: '', // This tag is used to filter the results by a specific post tag.\n    limit: 5, // This allows us to limit the total to 5 items.\n    truncate_body: 1, // This will truncate the body of each post to 1 character, which is useful if you want to work with lighter array.\n};\n\n\n\n2. Voter information\n\nOn selection of a particular post from the list, openPost function is fired. This function will call the get_active_votes function to fetch the voters of the post. get_active_votes requires author and permlink of the post to fetch its data.\n\nclient.database.call('get_active_votes', [author, permlink]).then(result =&gt; {\n    console.log('votes', result, JSON.stringify(result));\n\n    var voters = [];\n    voters.push(\n        `&lt;div class='pull-right'&gt;&lt;button onclick=goback()&gt;Close&lt;/button&gt;&lt;/div&gt;&lt;br&gt;`\n    );\n    result.forEach(voter =&gt; {\n        const name = voter.voter;\n        const time = new Date(voter.time).toDateString();\n        voters.push(`${name} (${time})`);\n    });\n\n    document.getElementById('postList').style.display = 'none';\n    document.getElementById('postBody').style.display = 'block';\n    document.getElementById('postBody').innerHTML = voters.join('&lt;li&gt;');\n});\n\n\n\ndocument.getElementById('postList').style.display = 'block';\ndocument.getElementById('postBody').style.display = 'none';\n\n\n\nThe “go back” function simply hides and shows the post list.\n\n3. Query result\n\nThe result is returned from the post content as a JSON object with the following properties:\n\n[\n    {\n        \"voter\": \"gekko\",\n        \"weight\": 157,\n        \"rshares\": 2626899959,\n        \"percent\": 10000,\n        \"reputation\": \"1185517433922\",\n        \"time\": \"2018-05-08T07:16:09\"\n    },\n    {\n        \"voter\": \"embat\",\n        \"weight\": 154,\n        \"rshares\": 2578364521,\n        \"percent\": 10000,\n        \"reputation\": \"161340267374\",\n        \"time\": \"2018-05-08T07:38:24\"\n    }\n]\n\n\n\nFrom this result, you have access to everything associated with the selected post, including additional metadata which is a JSON string that must be decoded to use.\n\n\n  voter - The author account name of the vote.\n  weight - Weight of the voting power.\n  rshares - Reward shares.\n  percent - Percent of vote.\n  reputation - The reputation of the account that voted.\n  time - Time the vote was submitted.\n\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/06_get_voters_list_on_post\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-getting-started": {
							"id": "tutorials-javascript-getting-started",
							"title": "JS: Getting Started",
							"category": "tutorials-javascript",
							"description": "Prepare your development environment to use Javascript with the Steem blockchain",
		  				"type": "",
							"url": "/#tutorials-javascriptgetting_started",
							"content": "Full, runnable src of Getting Started can be downloaded as part of the JS tutorials repository.\n\n\nFor Javascript tutorials, we will use the opensource library dsteem.\n\nNode.js\n\nTo get the most out of these tutorials, you should be familiar with Node.js, ES6 aka es2015, the DOM, and modern Javascript programming practices.\nYou can still learn a lot of these if they aren’t in your base skill-set; it’ll be much easier if they are.\n\nYour Dev Environment\n\nThese tutorials require Node.js 8.7+. Yarn is nice, but not required. Runnable versions of the tutorials are located in this github repo.\nIf you haven’t chosen an editor, you can use Atom, Sublime, Intellij, Vi, etc.\n\nIf you want to keep multiple versions of Node on your system try Node Version Manager.\n\nRunning a typical Tutorial\n\nLet’s say you wanted to run the very first tutorial, 01_blog_feed. Here’s how you’d do it:\n\n\n  \n    From Bash:\n\n    git clone https://github.com/steemit/devportal-tutorials-js.git\n\ncd devportal-tutorials-js/tutorials/01_blog_feed\nnpm i\nnpm run dev-server\n\n    \n  \n  \n    open http://localhost:3000/ in your web browser\n  \n\n\n### Github\n\nIf you'd rather clone projects in a windowed environment rather than the terminal, consider [Github Desktop](https://desktop.github.com/)."
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-power-down": {
							"id": "tutorials-javascript-power-down",
							"title": "JS: Power Down",
							"category": "tutorials-javascript",
							"description": "In this tutorial we will show how to perform a power down on all or part of an accounts VESTS using Steemconnect as well as show a clientside signing method",
		  				"type": "",
							"url": "/#tutorials-javascriptpower_down",
							"content": "Full, runnable src of Power Down can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial runs on the main Steem blockchain. Therefore, any accounts used here will affect real funds on the live network. Use with caution.\n\nIntro\n\nThis tutorial will demonstrate a few functions such as querying account by name and determining the vesting balance of the related account. We are using the call function provided by the dsteem library to pull account data from the Steem blockchain. We then calculate STEEM Power from the VESTS (vesting shares) for the convenience of the user. We will use a simple HTML interface to capture the account and its VESTS. It also has an interactive UI to perform a power down in full or in part.\n\nSteps\n\n\n  App setup Setup dsteem to use the proper connection and network.\n  Search account Get account details after input has account name\n  Calculate and Fill form Calculate available vesting shares and fill the form with details\n  Power down Power down VESTS with Steemconnect or client-side signing.\n\n\n1. App setup \n\nBelow, we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2. Search account \n\nAfter the account name field has been filled with a name, we automatically search for the account by name when the input is focused out. The related HTML input forms can be found in the index.html file. The values are pulled from that screen with the following:\n\n    const accSearch = document.getElementById('username').value;\n    const _account = await client.database.call('get_accounts', [[accSearch]]);\n    console.log(`_account:`, _account);\n\n\n\n3. Calculate and Fill form \n\nOnce the account data has been fetched, we will fill the form with VESTS balance and show current balance details. Note, that in order to get the available vesting shares we will have to check a few things:\n\n\n  if account is already powering down\n  how much is currently powering down\n  how much has been delegated (because active delegation locks those funds from being powered down)\n\n\nAvailable balance will be in the avail variable.\n\nFor the convenience of the user, we will convert available VESTS to STEEM with getDynamicGlobalProperties function and fill the form fields accordingly.\n\n    const name = _account[0].name;\n    const avail = parseFloat(_account[0].vesting_shares) - (parseFloat(_account[0].to_withdraw) - parseFloat(_account[0].withdrawn)) / 1e6 - parseFloat(_account[0].delegated_vesting_shares);\n\n    const props = await client.database.getDynamicGlobalProperties();\n    const vestSteem = parseFloat(parseFloat(props.total_vesting_fund_steem) *\n        (parseFloat(avail) / parseFloat(props.total_vesting_shares)),6);\n\n    const balance = `Available Vests for ${name}: ${avail} VESTS ~ ${vestSteem} STEEM POWER&lt;br/&gt;&lt;br/&gt;`;\n    document.getElementById('accBalance').innerHTML = balance;\n    document.getElementById('steem').value = avail+' VESTS';\n\n\n\nOnce form is filled with the maximum available VESTS balance, we can choose the amount of VESTS to power down.\n\n4. Power down \n\nWe have two options on how to Power down: Steemconnect and client-side signing. By default we generate a Steemconnect link to Power down (withdraw vesting), but we can also choose the client signing option to Power down right inside tutorial. Note: client-side signing will require Active Private key to perform the operation.\n\nIn order to enable client signing, we will generate the operation and also show Active Private key (wif) field to sign transaction right there, client side.\n\nBelow, we can see an example of the operation and signing transaction. After a successful broadcast, the result will be shown in user interface. It will show the block number that the transaction was included in.\n\nwindow.submitTx = async () =&gt; {\n    const privateKey = dsteem.PrivateKey.fromString(\n        document.getElementById('wif').value\n    );\n    const op = [\n        'withdraw_vesting',\n        {\n            account: document.getElementById('username').value,\n            vesting_shares: document.getElementById('steem').value,\n        },\n    ];\n    client.broadcast.sendOperations([op], privateKey).then(\n        function(result) {\n            document.getElementById('result').style.display = 'block';\n            document.getElementById(\n                'result'\n            ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n                result.block_num\n            }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;`;\n        },\n        function(error) {\n            console.error(error);\n        }\n    );\n};\n\n\n\nThat’s it!\n\nTo run this tutorial\n\n\n  git clone https://github.com/steemit/devportal-tutorials-js.git\n  cd devportal-tutorials-js/tutorials/23_power_down\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-power-up-steem": {
							"id": "tutorials-javascript-power-up-steem",
							"title": "JS: Power Up Steem",
							"category": "tutorials-javascript",
							"description": "In this tutorial we will learn how to power up Steem to account itself or another account using Steemconnect as well as with Clientside signing method",
		  				"type": "",
							"url": "/#tutorials-javascriptpower_up_steem",
							"content": "Full, runnable src of Power Up Steem can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial runs on the main Steem blockchain. And accounts queried are real users with liquid STEEM balances.\n\nIntro\n\nThis tutorial will show few functions such as querying account by name and getting account balance. We are using the call function provided by the dsteem library to pull account from the Steem blockchain. A simple HTML interface is used to capture the account and its STEEM balance as well as allowing interactively power up part or all of STEEM to choose account.\n\nSteps\n\n\n  App setup Setup dsteem to use the proper connection and network.\n  Search account Get account details after input has account name\n  Fill form Fill form with account reward balances\n  Power up Power up STEEM with Steemconnect or Client-side signing.\n\n\n1. App setup \n\nBelow we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2. Search account \n\nAfter account name field is filled with some name, we do automatic search for account by name when input is focused out. HTML input forms can be found in the index.html file. The values are pulled from that screen with the below:\n\n    const accSearch = document.getElementById('username').value;\n    const _account = await client.database.call('get_accounts', [[accSearch]]);\n    console.log(`_account:`, _account);\n\n\n\n3. Fill form \n\nAfter we fetched account data, we will fill form with STEEM balance and show current balance details.\n\nconst name = _account[0].name;\nconst steem_balance = _account[0].balance;\nconst balance = `Available Steem balance for ${name}: ${steem_balance}&lt;br/&gt;`;\ndocument.getElementById('accBalance').innerHTML = balance;\ndocument.getElementById('steem').value = steem_balance;\nconst receiver = document.getElementById('receiver').value;\n\n\n\n4. Power up \n\nWe have 2 options on how to Power up. Steemconnect and Client-side signing options. By default we generate Steemconnect link to Power up (transfer to vesting), but you can use client signing option to Power up right inside tutorial, note client-side signing will require Active private key to perform operation.\n\nIn order to enable client signing, we will generate operation and also show Active Private key (wif) field to sign transaction right there client side.\nBelow you can see example of operation and signing transaction, after successful operation broadcast result will be shown in user interface. It will be block number that transaction was included.\n\nwindow.submitTx = async () =&gt; {\n    const privateKey = dsteem.PrivateKey.fromString(\n        document.getElementById('wif').value\n    );\n    const op = [\n        'transfer_to_vesting',\n        {\n            from: document.getElementById('username').value,\n            to: document.getElementById('receiver').value,\n            amount: document.getElementById('steem').value,\n        },\n    ];\n    client.broadcast.sendOperations([op], privateKey).then(\n        function(result) {\n            document.getElementById('result').style.display = 'block';\n            document.getElementById(\n                'result'\n            ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n                result.block_num\n            }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;`;\n        },\n        function(error) {\n            console.error(error);\n        }\n    );\n};\n\n\n\nThat’s it!\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/22_power_up_steem\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-reblogging-post": {
							"id": "tutorials-javascript-reblogging-post",
							"title": "JS: Reblogging Post",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to reblog resteem a blog from steemit",
		  				"type": "",
							"url": "/#tutorials-javascriptreblogging_post",
							"content": "Full, runnable src of Reblogging Post can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will show the method of obtaining the relevant inputs for the reblog process followed by broadcasting the info to the steem blockchain using a demo account on the production server.\n\nIntro\n\nWe are using the client.broadcast function provided by dsteem to reblog the selected blogpost. There are 4 variables that are required to perform this action:\n\n\n  The account name that is doing the reblog\n  The private posting key of the account that is doing the reblog (this is not your main key)\n  The author of the post that is being reblogged\n  The title of the post that is being reblogged\n\n\nA simple HTML interface is used to capture the required information after which the transaction is submitted. There are two prerequisites within the reblog process in STEEM that have to be adhered to, namely, the post must not be older than 7 days, and the post can only be reblogged once by a specific account. The fields have been populated with information to give an example of what it would look like but care has to be taken to provide correct details before the function is executed.\n\nThis tutorial makes use of the This function is taken from the tutorial Blog Feed to get a list of trending posts.\n\nSteps\n\n\n  Configure connection Configuration of dsteem to use the proper connection and network.\n  Collecting information Generating relevant posting information with an HTML interface.\n  Broadcasting the reblog Assigning variables and executing the reblog.\n\n\n1. Configure connection**\n\nBelow we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. Although this tutorial is interactive, we will not post to the testnet due to the prerequisites of reblogging.\nThere is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\n\n//define network parameters\nlet opts = {};\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to a Steem node. This is currently setup on production, but we recommend using a testnet like https://testnet.steem.vc\nconst client = new dsteem.Client('https://api.steemit.com', opts);\n\n\n\n2. Collecting information\n\nNext we have the submitPost function that collects the required fields for the reblog process via an HTML interface\nafter wich we assign them to variables for use later.\n\n//this function will execute when the HTML form is submitted\nwindow.submitPost = async () =&gt; {\n    //get private key\n    const privateKey = dsteem.PrivateKey.fromString(\n        document.getElementById('postingKey').value\n    );\n    //get account name\n    const myAccount = document.getElementById('username').value;\n    //get blog author\n    const theAuthor = document.getElementById('theAuthor').value;\n    //get blog permLink\n    const thePermLink = document.getElementById('thePermLink').value;\n\n\n\n3. Broadcasting the reblog\n\nFinally we create two variables to simply the client.broadcast function line and broadcast the reblog instruction.\n\nconst jsonOp = JSON.stringify([\n    'reblog',\n    {\n        account: myAccount,\n        author: theAuthor,\n        permlink: thePermLink,\n    },\n]);\n\nconst data = {\n    id: 'follow',\n    json: jsonOp,\n    required_auths: [],\n    required_posting_auths: [myAccount],\n};\n\nclient.broadcast.json(data, privateKey).then(\n    function(result) {\n        console.log('client broadcast result: ', result);\n    },\n    function(error) {\n        console.error(error);\n    }\n);\n\n\n\nThere are also two console functions an a ui output under Resteem Results defined in order to track if the reblog\nas successful or not. If the broadcast succeeds the console.log will show the following:\n\nclient broadcast result:\n\n{\n    id: \"f10d69ac521cf34b0f5d18d938e68c89e77bb31d\",\n    block_num: 22886453,\n    trx_num: 35,\n    expired: false\n}\n\n\n\nThis indicates the block number at which the broadcast was sent as well as the transaction ID for the reblog.\n\nIf the reblog fails the console.log will present a long line of error code:\n\n{\n    name: \"RPCError\",\n    jse_shortmsg: \"blog_itr == blog_comment_idx.end(): Account has already reblogged this post\",\n    jse_info: {\n        ode: 10,\n        name: \"assert_exception\",\n        message: \"Assert Exception\",\n        stack: Array(6)\n    },\n    message: \"blog_itr == blog_comment_idx.end(): Account has already reblogged this post\",\n    stack: \"RPCError: blog_itr == blog_comment_idx.end(): Acco…lled (http://localhost:3000/bundle.js:440:690874)\"\n}\n\n\n\nThere is a line in the error log indicating “Account has already reblogged this post” indicating exactly that. This process can be run until a positive result is found.\n\nIt should be noted that reblogging a post does not create a new post on the blockchain but merely shares the post to whomever is following the user doing the reblog. Along with reblogging the custom_json broadcast operation also includes options for following users and editing blog content. More information on how to use the broadcast operation and options surrounding the operation can be found on the Steem Devportal\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/14_reblogging_post\n  npm i\n  npm run dev-server or npm run start\n  \n    After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-search-accounts": {
							"id": "tutorials-javascript-search-accounts",
							"title": "JS: Search Accounts",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to call a list of user names from the steem blockchain",
		  				"type": "",
							"url": "/#tutorials-javascriptsearch_accounts",
							"content": "Full, runnable src of Search Accounts can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will show the method of capturing a queried user name, matching that to the steemit database and then displaying the matching names. This tutorial will be run on the production server.\n\nIntro\n\nWe are using the call function provided by the dsteem library to pull user names from the steem blockchain. The information being pulled is dependent on two variables:\n\n\n  The max number of user names that needs to be displayed by the search\n  The string representing the first characters of the user name you are searching for\n\n\nA simple HTML interface is used to both capture the string query as well as display the completed search. The layout can be found in the “index.html” file.\n\nSteps\n\n\n  Configure connection Configuration of dsteem to use the proper connection and network.\n  Collecting input variables Assigning and collecting the necessary variables\n  Blockchain query Finding the data on the blockchain based on the inputs\n  Output Displaying query results\n\n\n1. Configure connection\n\nBelow we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n\t'0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2.  Collecting input variables\n\nNext we assign the max number of lines that will be returned by the query. We also use getElementById to retrieve the requested user name for searching from the HTML interface. The max value can very easily also be attained from the HTML side simply by adding another input line in index.html and a second getElementById line.\n\nconst max = 10;\nwindow.submitAcc = async () =&gt; {\n    const accSearch = document.getElementById(\"username\").value;\n\n\n\n3.  Blockchain query\n\nThe next step is to pull the user names from the blockchain that matches the “username” variable that was retrieved. This is done using the database.call function and assigning the result to an array.\n\nconst _accounts = await client.database.call('lookup_accounts',[accSearch, max]);\n    console.log(`_accounts:`, _accounts);\n\n\n\n4.  Output\n\nFinally we create a list from the “_accounts” array generated in step 3.\n\ndocument.getElementById('accList').innerHTML = _accounts.join('&lt;br&gt;');\n}\n\n\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/15_search_accounts\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-search-tags": {
							"id": "tutorials-javascript-search-tags",
							"title": "JS: Search Tags",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to run a search for trending tags",
		  				"type": "",
							"url": "/#tutorials-javascriptsearch_tags",
							"content": "Full, runnable src of Search Tags can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial runs on the main Steem blockchain.\n\nIntro\n\nThis tutorial will show the method of capturing a queried tag name and matching it to the steemit database. We are using the call function provided by the dsteem library to pull tags from the steem blockchain. A simple HTML interface is used to both capture the string query as well as display the completed search.\n\nsteps\n\n\n  Configure connection Configuration of dsteem to use the proper connection and network.\n  Search input Collecting the relevant search criteria\n  Run Search Running the search on the blockchain\n  Output Displaying the results of the search query\n\n\n1. Configure connection \n\nBelow we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2. Search input \n\nCollecting of the search criteria happens via an HTML input. The form can be found in the index.html file. The values are pulled from that screen with the below:\n\nconst max = 10;\nwindow.submitTag = async () =&gt; {\n    const tagSearch = document.getElementById(\"tagName\").value;\n\n\n\n3. Run Search \n\nIn order to access the blockchain to run the search a call function is used with the search field and maximum list items as parameters.\n\nconst _tags = await client.database.call('get_trending_tags',[tagSearch, max]);\n\n\n\nThe result of the search is an array of tags along with their respective vital data like comments, payouts and such.\n\n4. Output \n\nDue to the output from the call function being an array, we can’t use a simple post function to display the tags. The specific fields within the array needs to be selected and then displayed.\n\nconsole.log('tags: ', _tags);\nvar posts = [];\n_tags.forEach(post =&gt; {\n    posts.push(\n        `&lt;div class=\"list-group-item\"&gt;&lt;h5 class=\"list-group-item-heading\"&gt;${\n            post.name\n        }&lt;/h5&gt;&lt;/div&gt;`\n    );\n});\n//disply list of tags with line breaks\ndocument.getElementById('tagList').innerHTML = posts.join('&lt;br&gt;');\n\n\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/16_search_tags\n  npm i\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-set-withdraw-route": {
							"id": "tutorials-javascript-set-withdraw-route",
							"title": "JS: Set Withdraw Route",
							"category": "tutorials-javascript",
							"description": "This tutorial is about setting routes to your power downs or withdraws",
		  				"type": "",
							"url": "/#tutorials-javascriptset_withdraw_route",
							"content": "Full, runnable src of Set Withdraw Route can be downloaded as part of the JS tutorials repository.\n\n\nWe will learn how to allocate a percentage for withdrawal to other accounts using Steemconnect as well as with the client-side signing method. This tutorial runs on the main Steem blockchain. Therefore, any accounts used here will affect real funds on the live network. Use with caution.\n\nIntro\n\nThis tutorial will demonstrate a few functions such as querying account by name and determining the vesting balance of the related account. This will allow us to set “withdraw routes” to other accounts with a percent selection and auto power up function. This feature is quite useful if you want to withdraw a portion of your STEEM to a separate account or POWER UP other accounts as you withdraw from one account.\n\nSteps\n\n\n  App setup Setup dsteem to use the proper connection and network.\n  Get account routes Get account’s current routes\n  Fill form Fill form with appropriate data\n  Set withdraw route Set route with Steemconnect or client-side signing\n\n\n1. App setup \n\nBelow, we have dsteem pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\n2. Get account routes \n\nAfter the account name field is provided, using the Get withdraw routes button, we can fetch the current withdraw routes, if they exist. The related HTML input forms can be found in the index.html file. The values are pulled from that screen with the following:\n\n    const accSearch = document.getElementById('username').value;\n\n    const _account = await client.database.call('get_withdraw_routes', [accSearch]);\n    console.log(`_account:`, _account);\n\n\n\n3. Fill form \n\nAfter we have fetched the account data, we will show a list of current routes, if they exist, and display information to the user about how many much they can apply to other accounts.\n\nlet info = '';\nlet sum = 0;\nif (_account.length &gt; 0) {\n    for (var i = 0; i &lt; _account.length; i++) {\n        info += `${_account[i].to_account} - ${_account[i].percent / 100}%&lt;br&gt;`;\n        sum += _account[i].percent / 100;\n    }\n} else {\n    info += `No route is available!&lt;br&gt;`;\n}\ninfo += `You can set ${100 - sum}% remaining part to other accounts!`;\ndocument.getElementById('accInfo').innerHTML = info;\n\n\n\nPrevious routes can be overwritten by changing and submitting a new transaction to the same account.\n\nWe also generate a Steemconnect signing link.\n\nwindow.openSC = async () =&gt; {\n    const link = `https://steemconnect.com/sign/set-withdraw-vesting-route?from_account=${\n        document.getElementById('username').value\n    }&amp;percent=${document.getElementById('steem').value * 100}&amp;to_account=${\n        document.getElementById('account').value\n    }&amp;auto_vest=${document.getElementById('percent').checked}`;\n    window.open(link);\n};\n\n\n\n4. Set withdraw route \n\nWe have two options on how to Power down: Steemconnect and client-side signing. Since this action requires Active authority, both client-side and Stemconnect signing will require the Active Private key to sign the transaction. The transaction submission function appears as follows:\n\nwindow.submitTx = async () =&gt; {\n    const privateKey = dsteem.PrivateKey.fromString(\n        document.getElementById('wif').value\n    );\n    const op = [\n        'set_withdraw_vesting_route',\n        {\n            from_account: document.getElementById('username').value,\n            to_account: document.getElementById('account').value,\n            percent: document.getElementById('steem').value * 100,\n            auto_vest: document.getElementById('percent').checked,\n        },\n    ];\n    client.broadcast.sendOperations([op], privateKey).then(\n        function(result) {\n            document.getElementById('result').style.display = 'block';\n            document.getElementById(\n                'result'\n            ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n                result.block_num\n            }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;`;\n        },\n        function(error) {\n            console.error(error);\n        }\n    );\n};\n\n\n\nThat’s it!\n\nTo run this tutorial\n\n\n  git clone https://github.com/steemit/devportal-tutorials-js.git\n  cd devportal-tutorials-js/tutorials/26_set_withdraw_route\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-steemconnect": {
							"id": "tutorials-javascript-steemconnect",
							"title": "JS: Steemconnect",
							"category": "tutorials-javascript",
							"description": "Understand the basics of using Steemconnect with your Steem application",
		  				"type": "",
							"url": "/#tutorials-javascriptsteemconnect",
							"content": "Full, runnable src of Steemconnect can be downloaded as part of the JS tutorials repository.\n\n\nIn this tutorial we will setup Steemconnect for demo application and step by step show the process of setting up dedicated account for your app to use Steemconnect Dashboard and setup backend of your application to use Steemconnect authorization properly.\n\nIntro\n\nThe application in this tutorial asks the user to grant an access to demo-app and get token from Steemconnect. Once permission is granted, demo-app can get details of user via an api call that requires access token.\nPurpose is to allow any application request permission from user and perform action via access token.\n\nSome other calls that require an access token (or login) are:\n\n\n  Vote\n  Comment\n  Post\n  Follow\n  Reblog\n\n\nLearn more about Steemconnect operations here\n\nSteps\n\n\n  Steemconnect Dashboard Create account for application and set up dashboard\n  Initialize Steemconnect Initialize SDK in your application code\n  Login URL Form login url for user\n  Request token Request token with login url\n  Set token Set or save token for future requests\n  Get user data Get user details with token\n  Logout Logout user and clear token\n\n\n1. Steemconnect Dashboard\n\nSteemconnect is unified authentification system built on top of Steem built in collaboration of Busy.org and Steemit Inc.\nLayer to ensure easy access and setup for all application developers as well as secure way for users to interact with Steem apps.\n\nSetting up Steemconnect in your app is straight-forward process and never been this easy.\n\nHere are the steps that helps you to setup new app:\n\n1a. Visit Steemconnect Dashboard and login with your Steem credentials\n\n\n\n1b. You will see Applications and Developers section, in Developers section click on My Apps\n\n\n\n\n\n1c. Create New App using Steemconnect, which will help you create new Steem account for your application. Let’s call it demo-app for this tutorial purpose.\n\n\n\nAccount creation fee will be deducted from your balance, make sure you have enough funds to complete account creation.\n\nNext step is to login with account which has enough balance to pay for account creation fee.\n\n\n\n1d. Give your app name, description, icon image link, website (if available) and Redirect URI(s)\n\n\n\nApplication name and description should give users clear understanding what permissions it requires and what is the purpose of the app.\n\nApp Icon field should be publicly accessible and available link to your logo or icon.\n\nWebsite field is homepage for the application if exist.\n\nRedirect URI(s) will be used within your application to forward user after authentification is successful. You can specify multiple callback URLs with each new line. Callback in Steemconnect SDK should match exactly one of URI(s) specified on this page. Due to security reasons if redirect URI(s) used in SDK is other than you specified, it will not work.\nThis is typical backend web development, we hope you know how to set up your backend/app to handle callback URLs.\n\n\n  Disclaimer: All images/screenshots of user interface may change as Steemconnect evolves\n\n\n2. Initialize Steemconnect\n\nOnce you have setup account for new application, you can setup application with Steemconnect authentification and API processes.\nTo do that, you will need to install sc2-sdk nodejs package with npm i sc2-sdk.\nWithin application you can initialize Steemconnect\n\n\n  app - is account name for application that we have created in Step I.3, callbackURL - is Redirect URI that we have defined in Step I.4, scope - permissions application is requiring/asking from users\n\n\nNow that sc2-sdk is initialized we can start authentication and perform simple operations with Steemconnect.\n\n3. Login URL\n\n\n  getLoginURL function you see on the right side, returns login URL which will redirect user to sign in with Steem connect screen. Successfull login will redirect user to Redirect URI or callbackURL. Result of successful login will return access_token, expires_in and username information, which application will start utilizing.\n\n\n4. Request token\n\n\n  Application can request returned link into popup screen or relevant screen you have developed. Popup screen will ask user to identify themselves with their username and password. Once login is successful, you will have Results\n\n\n5. Set token\n\n\n  Returned data has access_token - which will be used in future api calls, expires_in - how long access token is valid in seconds and username of logged in user.\n\n\n\n  After getting access_token, we can set token for future Steemconnect API requests.\n\n\n6. Get user data\n\n\n  Users info can be checked with me which will return object\naccount - current state of account and its details on Steem blockchain, name - username, scope - permissions allowed with current login, user - username, user_metadata - additional information user has setup.\n\n\n7. Logout\n\n\n  In order to logout, you can use revokeToken function from sc2-sdk.\n\n\nThat’s all there is to it.\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/02_steemconnect\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-stream-blockchain-transactions": {
							"id": "tutorials-javascript-stream-blockchain-transactions",
							"title": "JS: Stream Blockchain Transactions",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to stream transactions and blocks from Steem blockchain",
		  				"type": "",
							"url": "/#tutorials-javascriptstream_blockchain_transactions",
							"content": "Full, runnable src of Stream Blockchain Transactions can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will take you through the process of preparing and streaming blocks using the blockchain.getBlockStream() operation. Being able to stream blocks is crucial if you are building automated or follow up scripts or detect certain type of transactions on network or simply use it for your backend application to sync and/or work with data in real-time.\n\nIntro\n\nTutorial is demonstrating the typical process of streaming blocks on Steem. We will show some information from each block that is being streamed to give you an idea. Each block contains transactions objects as well but we will not show each of this data in user interface.\n\nWe are using the blockchain.getBlockStream function provided by dsteem which returns each block after it has been accepted by witnesses. By default it follows irreversible blocks which was accepted by all witnesses. Function follows or gets blocks every 3 seconds so it would not miss any new blocks. We will then extract part of this data and show it in list.\n\nSteps\n\n\n  App setup Configure proper settings for dsteem\n  Stream blocks Stream blocks\n  Display result Show results in proper UI\n\n\n1. App setup\n\nAs usual, we have a file called public/app.js, which holds the Javascript segment of the tutorial. In the first few lines, we have defined the configured library and packages:\n\nconst dsteem = require('dsteem');\n\nlet opts = {};\n\n//connect to production server\nopts.addressPrefix = 'STM';\nopts.chainId =\n    '0000000000000000000000000000000000000000000000000000000000000000';\n\n//connect to server which is connected to the network/production\nconst client = new dsteem.Client('https://api.steemit.com');\n\n\n\nAbove, we have dsteem pointing to the live network with the proper chainId, addressPrefix, and endpoint. Because this tutorial requires active transactions to see some data.\n\n2. Stream blocks\n\nNext, we have a main function which fires at on-load and starts streaming blocks from network.\n\nstream = client.blockchain.getBlockStream();\nstream\n    .on('data', function(block) {\n        //console.log(block);\n        blocks.unshift(\n            `&lt;div class=\"list-group-item\"&gt;&lt;h5 class=\"list-group-item-heading\"&gt;Block id: ${\n                block.block_id\n            }&lt;/h5&gt;&lt;p&gt;Transactions in this block: ${\n                block.transactions.length\n            } &lt;br&gt;Witness: ${\n                block.witness\n            }&lt;/p&gt;&lt;p class=\"list-group-item-text text-right text-nowrap\"&gt;Timestamp: ${\n                block.timestamp\n            }&lt;/p&gt;&lt;/div&gt;`\n        );\n        document.getElementById('blockList').innerHTML = blocks.join('');\n    })\n    .on('end', function() {\n        // done\n        console.log('END');\n    });\n\n\n\nWe have also defined Pause and Resume functions for relevant buttons to pause/resume stream at any moment.\n\n//pause stream\nwindow.pauseStream = async () =&gt; {\n    state = stream.pause();\n};\n\n//resume stream\nwindow.resumeStream = async () =&gt; {\n    state = state.resume();\n};\n\n\n\n3. Display result\n\nIn above scection, following line of code populates object with the data coming from Stream:\n\nblocks.unshift(\n    `&lt;div class=\"list-group-item\"&gt;&lt;h5 class=\"list-group-item-heading\"&gt;Block id: ${\n        block.block_id\n    }&lt;/h5&gt;&lt;p&gt;Transactions in this block: ${\n        block.transactions.length\n    } &lt;br&gt;Witness: ${\n        block.witness\n    }&lt;/p&gt;&lt;p class=\"list-group-item-text text-right text-nowrap\"&gt;Timestamp: ${\n        block.timestamp\n    }&lt;/p&gt;&lt;/div&gt;`\n);\n\n\n\nExample of output:\n\n{\n    block_id: \"015d34f12bced299cec068500fdbf3070016160c\",\n    extensions:[],\n    previous:\"015d34f021e85b437c9fcb8cf47d9e258a1ad7e4\",\n    signing_key:\"STM5zNNjMyCKbhcPgo5ca7jq9UBGVzpq6yoaHw1R2dKaZdxhcuwuW\",\n    timestamp:\"2018-05-30T14:27:36\",\n    transaction_ids:\n        [\"0e7ce7445884c44346da4dafdef99ea7fda60bd0\", \"194f404d3dab66459421792045625334f7465da1\"],\n    transaction_merkle_root:\"bc39f1fb9edbb02200d1ab0e68d3dbc4afc62aca\",\n    transactions:[{…}, {…}],\n    witness:\"good-karma\",\n    witness_signature:\"2005f2d5f9d4000ca2ba76db5e555982e3ca47d6f6516ea1bacb316545b478d6617987afd71b5bf0b3f231fdc140453f9043b8ea981220cecf44118d50eedbe870\"\n}\n\n\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/13_stream_blockchain_transactions\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-submit-comment-reply": {
							"id": "tutorials-javascript-submit-comment-reply",
							"title": "JS: Submit Comment Reply",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to post a simple comment to Steem",
		  				"type": "",
							"url": "/#tutorials-javascriptsubmit_comment_reply",
							"content": "Full, runnable src of Submit Comment Reply can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will take you through the process of preparing and posting comment using the broadcast.comment operation.\nBeing able to post a comment is critical to most social applications built on Steem.\n\nIntro\n\nWe are using the broadcast.comment function provided by the dsteem library which generates, signs, and broadcasts the transaction to the network. On the Steem platform, posts and comments are all internally stored as a comment object, differentiated by whether or not a parent_author exists. When there is no parent_author, the it’s a post, when there is, it’s a comment.\n\nSteps\n\n\n  App setup Import dsteem into app.js and prepare it to communicate with a Steem blockchain\n  Choose parent post Choose a parent post on which to comment. Parse the author and permlink from it.\n  Add content Add body content to your comment\n  Get comment data Collect values from the UI\n  Create comment permlink Create a permlink for your comment\n  Build comment object Assemble the information into a valid comment object\n  Post comment Send the new comment to the blockchain &amp; render the result.\n\n\n1. App setup\n\nAs usual, we have a public/app.js file which holds the Javascript segment of the tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to community testnet\nopts.addressPrefix = 'STX';\nopts.chainId =\n    '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673';\n//connect to server which is connected to the network/testnet\nconst client = new dsteem.Client('https://testnet.steem.vc', opts);\n\n\n\nAbove, we have dsteem pointing to the test network with the proper chainId, addressPrefix, and endpoint.\nBecause this tutorial modifies the blockchain, we will use a testnet and a predefined account to demonstrate comment publishing.\n\n2. Choose parent post\n\nWe need to choose a parent post and parse out the parent author and parent permlink.\nBelow is a url that uses an instance of condenser pointed at our testnet.\n\nhttp://condenser.steem.vc/qbvxoy72qfc/@demo/dsf0yxlox2d\n\n\n\nIn this case. dsf0yxlox2d will be our parent permlink and @demo will be the the parent author.\n\n3. Add content\n\nWe’ve added the parent post info and Some amazing content in our UI via the keyboard.\n\n\n4. Get Comment Data\n\nIn the submitComment function, (runs when “Submit comment!” is clicked)\nWe gather information from the UI.\n\n//get private key\nconst privateKey = dsteem.PrivateKey.fromString(\n    document.getElementById('postingKey').value\n);\n//get account name\nconst account = document.getElementById('username').value;\n//get body\nconst body = document.getElementById('body').value;\n//get parent author permalink\nconst parent_author = document.getElementById('parent_author').value;\n//get parent author permalink\nconst parent_permlink = document.getElementById('parent_permlink').value;\n\n\n\n5. Create comment permlink\n\nEvery post needs a unique permalink.\nBecause comments don’t typically have a title, we recommend using a random number for ours.\n\nNote: Take care of your users: Because permlinks are unique within an author’s scope, we recommend random numbers for comments; or at least making it a default in your settings.\n\n//generate random permanent link for post\nconst permlink = Math.random()\n    .toString(36)\n    .substring(2);\n\n\n\n6. Build comment object\n\nWe take the information we gathered from the UI and put it into a well structured comment object.\n\nconst comment = {\n    author: account,\n    title: '',\n    body: body,\n    parent_author: parent_author,\n    parent_permlink: parent_permlink,\n    permlink: permlink,\n    json_metadata: '',\n};\n\n\n\n7. Post comment\n\nWe post the comment to the blockchain and render the resulting block number if successful,\nor output an error to the console if there’s a failure.\n\nconsole.log('comment broadcast object', comment);\nclient.broadcast.comment(comment, privateKey).then(\n    function(result) {\n        console.log('comment broadcast result', result);\n        document.getElementById(\n            'postLink'\n        ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n            result.block_num\n        }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=\"http://condenser.steem.vc/@${parent_author}/${parent_permlink}\"&gt;Check post here&lt;/a&gt;`;\n    },\n    function(error) {\n        console.error(error);\n    }\n);\n\n\n\nA successful comment will output something like the following to the console:\n\n\nThat’s all there is to it.\n\nThe broadcast operation has more to offer than just committing a post/comment to the blockchain. It provides a mulititude of options that can accompany this commit. The max payout and percent of steem dollars can be set. When authors don’t want all of the benifits from a post, they can set the payout factors to zero or beneficiaries can be set to receive part of the rewards. You can also set whether votes are allowed or not. The broadcast to the blockchain can be modified to meet the exact requirements of the author. More information on how to use the broadcast operation can be found on the Steem Devportal with a list of the available broadcast options under the specific Appbase API\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/11_submit_comment_reply\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-submit-post": {
							"id": "tutorials-javascript-submit-post",
							"title": "JS: Submit Post",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to prepare comments for Steem and then submit using the broadcastcomment function",
		  				"type": "",
							"url": "/#tutorials-javascriptsubmit_post",
							"content": "Full, runnable src of Submit Post can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will show the method of properly formatting content followed by broadcasting the information to the steem blockchain using a demo account on the testnet.\n\nIntro\n\nWe are using the client.broadcast.comment function provided by dsteem which generates, signs, and broadcasts the transaction to the network. On the Steem platform, posts and comments are all internally stored as a comment object, differentiated by whether or not a parent_author exists. When there is no parent_author, then it’s a post, otherwise it’s a comment.\n\nSteps\n\n\n  App setup Configuration of dsteem to use the proper connection and network.\n  Fetch Steem Post or Comment data Defining information variables with the submitpost function.\n  Format and Broadcast Formatting the comments and submitting to the blockchain.\n\n\n1. App setup\n\nBelow we have dsteem pointing to the test network with the proper chainId, addressPrefix, and endpoint. Because this tutorial is interactive, we will not publish test content to the main network. Instead, we’re using the testnet and a predefined account to demonstrate post publishing.\nThere is a public/app.js file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\nlet opts = {};\n//connect to community testnet\nopts.addressPrefix = 'STX';\nopts.chainId =\n    '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673';\n//connect to server which is connected to the network/testnet\nconst client = new dsteem.Client('https://testnet.steem.vc', opts);\n\n\n\n2. Fetch Steem Post or Comment data\n\nNext, we have the submitPost function which executes when the Submit post button is clicked.\n\n//get private key\nconst privateKey = dsteem.PrivateKey.fromString(\n    document.getElementById('postingKey').value\n);\n//get account name\nconst account = document.getElementById('username').value;\n//get title\nconst title = document.getElementById('title').value;\n//get body\nconst body = document.getElementById('body').value;\n//get tags and convert to array list\nconst tags = document.getElementById('tags').value;\nconst taglist = tags.split(' ');\n//make simple json metadata including only tags\nconst json_metadata = JSON.stringify({ tags: taglist });\n//generate random permanent link for post\nconst permlink = Math.random()\n    .toString(36)\n    .substring(2);\n\n\n\nThe getElementById function is used to obtain data from the HTML elements and assign them to constants. Tags are separated by spaces in this example and stored in an array list called taglist for later use. However, the structure of how to enter tags depends on your needs. Posts on the blockchain can hold additional information in the json_metadata field, such as the tags list which we have assigned. Posts must also have a unique permanent link scoped to each account. In this case we are just creating a random character string.\n\n3. Format and Broadcast\n\nThe next step is to pass all of these elements in 2. to the client.broadcast.comment function.\n\n//broadcast post to the testnet\nclient.broadcast\n    .comment(\n        {\n            author: account,\n            body: body,\n            json_metadata: json_metadata,\n            parent_author: '',\n            parent_permlink: taglist[0],\n            permlink: permlink,\n            title: title,\n        },\n        privateKey\n    )\n    .then(\n        function(result) {\n            document.getElementById('title').value = '';\n            document.getElementById('body').value = '';\n            document.getElementById('tags').value = '';\n            document.getElementById('postLink').style.display = 'block';\n            document.getElementById(\n                'postLink'\n            ).innerHTML = `&lt;br/&gt;&lt;p&gt;Included in block: ${\n                result.block_num\n            }&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href=\"http://condenser.steem.vc/${\n                taglist[0]\n            }/@${account}/${permlink}\"&gt;Check post here&lt;/a&gt;`;\n        },\n        function(error) {\n            console.error(error);\n        }\n    );\n\n\n\nNote that the parent_author and parent_permlink fields are used for replies (also known as comments). In this example, since we are publishing a post instead of a comment/reply, we will have to leave parent_author as an empty string and assign the first tag to parent_permlink.\n\nAfter the post has been broadcast to the network, we can simply set all the fields to empty strings and show the post link to check it from a condenser instance running on the selected testnet.\n\nThe broadcast operation has more to offer than just committing a post/comment to the blockchain. It provides a mulititude of options that can accompany this commit. The max payout and percent of steem dollars can be set. When authors don’t want all of the benifits from a post, they can set the payout factors to zero or beneficiaries can be set to receive part of the rewards. You can also set whether votes are allowed or not. The broadcast to the blockchain can be modified to meet the exact requirements of the author. More information on how to use the broadcast operation can be found on the Steem Devportal with a list of the available broadcast options under the specific Appbase API\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/10_submit_post\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-transfer-steem-and-sbd": {
							"id": "tutorials-javascript-transfer-steem-and-sbd",
							"title": "JS: Transfer Steem And Sbd",
							"category": "tutorials-javascript",
							"description": "By the end of this tutorial you should know how to transfer both STEEM and SBD from one account to another",
		  				"type": "",
							"url": "/#tutorials-javascripttransfer_steem_and_sbd",
							"content": "Full, runnable src of Transfer Steem And Sbd can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will take you through the process of preparing and submitting a transfer using the broadcast operation. Two demo accounts are provided to use on the testnet but all variables can be easily changed and applied to the production server.\n\nThere is also an alternative method to transfer from one account to another using a hot signing link that can be generated via Steemconnect. You create a link using the to account, the amount, and a memo (optional comments). This link then allows you to do a transfer simply by adding the login details of the from account. This is a very simple way to send a payment request to any other user with the correct details already provided by the link.\n\nIntro\n\nWe are using the broadcast.transfer function provided by the dsteem library to send the transaction through to the network. In order to do the transfer, two accounts are required. One the sender and the other the recipient. You also can’t transfer from and to the same account, which is why two accounts have been provided for this tutorial. There are 6 parameters required for the transfer operation:\n\n\n  Username - The username of the account making the transfer (from account)\n  Privatekey - This is the private active key of the sender\n  Recipient - The account that is receiving the STEEM or SBD (to account)\n  Memo - This is a text field which can be used for a comment on the transfer or it can be left empty\n  Amount - This is the amount of STEEM to transfer. This has to be a positive value with 3 decimals in order for the transaction to be completed\n  Type - This is the currency of the transfer, STEEM or SBD. This value has to be written ALL CAPS in order for the transaction to be completed\n\n\nIt is noteworthy that Steem Power (VESTS) cannot be transferred with this operation.\n\nSteps\n\n\n  Configure connection Configuration of dsteem to communicate with a Steem blockchain\n  Input variables Collecting the required inputs via an HTML UI\n  Object creation Creating an object to use in the broadcast operation\n  Broadcast Broadcasting the transfer to the blockchain\n\n\n1. Configure connection\n\nAs usual, we have a public/app.js file which holds the Javascript segment of the tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\n//define network parameters\nlet opts = {};\nopts.addressPrefix = 'STX';\nopts.chainId =\n    '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673';\n//connect to a steem node, testnet in this case\nconst client = new dsteem.Client('https://testnet.steem.vc', opts);\n\n\n\nAbove, we have dsteem pointing to the test network with the proper chainId, addressPrefix, and endpoint.\nBecause this tutorial modifies the blockchain, we will use a testnet and predefined accounts to demonstrate the transfer process.\n\n2. Input variables\n\nThe required parameters for the transfer operation is recorded via an HTML UI that can be found in the public/index.html file. The values are prepopulated in this case with testnet demo accounts. The transfer amount is set to 1.000 but any value can be input as long as the sender has enough STEEM to send.\n\nThe parameter values are allocated as seen below, once the user clicks on the “Transfer” button.\n\nwindow.submitTransfer = async () =&gt; {\n    //get all values from the UI\n    //get account name of sender\n    const username = document.getElementById('username').value;\n    //get private active key\n    const privateKey = dsteem.PrivateKey.fromString(\n        document.getElementById('privateKey').value\n    );\n    //get recipient\n    const recipient = document.getElementById('recipient').value;\n    //get comments\n    const comments = document.getElementById('comments').value;\n    //get transfer amount\n    const quantity = document.getElementById('quantity').value;\n    //get transfer type\n    const type = document.getElementById('type').value;\n\n\n\n3. Object creation\n\nIn the broadcast.transfer operation, the amount parameter is a combination of the transfer value and type which is why we concatenate the two values into a single variable. We then create a transfer object with the input variables to use within the broadcast operation.\n\nconst transfer = quantity.concat(' ', type);\n    \n    //create transfer object\n    const transf = new Object();\n    transf.from = username;\n    transf.to = recipient;\n    transf.amount = transfer;\n    transf.memo = comments;\n\n\n\n4. Broadcast\n\nWe can complete the broadcast operation using the created object and the private active key received from the input UI. The result of the transfer is displayed on the UI to confirm whether it was a success or an error occurred. The result is also displayed in the console with the relevant block number or transfer error.\n\nclient.broadcast.transfer(transf, privateKey).then(\n        function(result) {\n            console.log(\n                'included in block: ' + result.block_num,\n                'expired: ' + result.expired\n            );\n            document.getElementById('transferResultContainer').style.display =\n                'flex';\n            document.getElementById('transferResult').className =\n                'form-control-plaintext alert alert-success';\n            document.getElementById('transferResult').innerHTML = 'Success';\n        },\n        function(error) {\n            console.error(error);\n            document.getElementById('transferResultContainer').style.display =\n                'flex';\n            document.getElementById('transferResult').className =\n                'form-control-plaintext alert alert-danger';\n            document.getElementById('transferResult').innerHTML =\n                error.jse_shortmsg;\n        }\n    );\n\n\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/20_transfer_STEEM_and_SBD\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
				
					
						,
						
						"tutorials-javascript-vote-on-content": {
							"id": "tutorials-javascript-vote-on-content",
							"title": "JS: Vote On Content",
							"category": "tutorials-javascript",
							"description": "Create a weighted up or down vote on a comment or post and send it to Steem",
		  				"type": "",
							"url": "/#tutorials-javascriptvote_on_content",
							"content": "Full, runnable src of Vote On Content can be downloaded as part of the JS tutorials repository.\n\n\nThis tutorial will take you through the process of preparing and submitting a vote using the broadcast operation.\nBecause this tutorial essentially produces spam, it will be pointed at a Steem testnet. The testnet is an open resource,\nso the default account and posting key in this tutorial may have been changed by another developer learning the ropes.\nIf that happens, you’ll want to create a new account on the testnet and use that account’s credentials instead.\n\nTo learn more about the testnet, including an easy way to create a play account, visit https://testnet.steem.vc/\n\nIntro\n\nWe are using the broadcast.vote function provided by the dsteem library to send the transaction through to the\nnetwork. On the Steem platform, posts and comments are all internally stored as a comment object, differentiated by\nwhether or not a parent_author exists. When there is no parent_author, then it’s a post, when there is, it’s a\ncomment. Voting is done on either of the two based on the author and permlink of the comment. There are 5 parameters\nrequired for the voting operation:\n\n\n  Username - The username of the account making the vote (the voter)\n  Privatekey - This is the private posting key of the voter\n  Author - The author of the comment/post that the voter is voting on\n  Permlink - The unique identifier of the comment/post of the author\n  Weight - This is the weight that the vote will carry. The value ranges from -10000 (100% flag) to 10000 (100% upvote)\n\n\nDue to the low amount of posts on the testnet we added an additional step to create a post before we vote on it. The values are auto loaded in the respective input boxes. A full tutorial on how to create a new post can be found on the Steem Devportal\n\nSteps\n\n\n  Configure connection Configuration of dsteem to communicate with a Steem blockchain\n  Create new post Creating a new post on the testnet\n  Input variables Collecting the required inputs via an HTML UI\n  Broadcast Creating an object and broadcasting the vote to the blockchain\n\n\n1. Configure connection\n\nAs usual, we have a public/app.js file which holds the Javascript segment of the tutorial. In the first few lines we define the configured library and packages:\n\nconst dsteem = require('dsteem');\n\nconst addressPrefix = 'STX';\nconst chainId =\n    '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673';\nconst apiUrl = 'https://testnet.steem.vc';\n\nconst opts = {\n    addressPrefix,\n    chainId,\n};\n\nconst client = new dsteem.Client('https://testnet.steem.vc', opts);\n\n\n\nAbove, we have dsteem pointing to the test network with the proper chainId, addressPrefix, and endpoint.\nBecause this tutorial modifies the blockchain, we will use a testnet and a predefined account to demonstrate voting.\n\n2. Create new post\n\nA new blog post is created on the testnet with the necessary variables for the vote function being allocated as well. If a post is successfully created it will display a block number and a value will be assigned to the permlink variable.\n\n//refer to \"10_submit_post\" in the tutorials folder for creating a post on steemit\n//create post function\nwindow.createPost = async () =&gt; {\n    //get private key\n    const privateKey = createPrivateKey();\n    //get account name\n    const account = document.getElementById('username').value;\n    //for content\n    const time = new Date().getTime();\n    //get title\n    const title = `developers.steem.io - JS-T:17 ${time}`;\n    //get body\n    const body = `Go to [developers.steem.io](https://developers.steem.io) for the latest in Steem tutorials! This post was created by someone using the active version of those tutorials at  [https://github.com/steemit/devportal-tutorials-js](https://github.com/steemit/devportal-tutorials-js)\n        \n        ${time}`;\n    //get tags and convert to array list\n    const tags = 'blog';\n    const taglist = tags.split(' ');\n    //make simple json metadata including only tags\n    const json_metadata = JSON.stringify({ tags: taglist });\n    //generate random permanent link for post\n    const permlink = Math.random()\n        .toString(36)\n        .substring(2);\n\n    client.broadcast\n        .comment(\n            {\n                author: account,\n                body: body,\n                json_metadata: json_metadata,\n                parent_author: '',\n                parent_permlink: tags,\n                permlink: permlink,\n                title: title,\n            },\n            privateKey\n        )\n        .then(\n            function(result) {\n                document.getElementById('permlink').innerHTML = permlink;\n                document.getElementById(\n                    'postLink'\n                ).innerHTML = `Included in block: &lt;a href=\"http://condenser.steem.vc/${\n                    taglist[0]\n                }/@${account}/${permlink}\" target=\"_blank\"&gt;${\n                    result.block_num\n                }&lt;/a&gt;`;\n                document.getElementById('postResult').style.display = 'flex';\n                document.getElementById('permlink').value = permlink;\n            },\n            function(error) {\n                console.error(error);\n            }\n        );\n};\n\n\n\nYou may have noted the mystery function createPrivateKey(). It’s a convenience function that allows us to give the\nuser some meaningful UI feedback if they put in a bad posting key. The important part of it is\nreturn dsteem.PrivateKey.fromString(&lt;somestring&gt;) but its full glory can be seen in the snippet below\n\nconst createPrivateKey = function() {\n    try {\n        return dsteem.PrivateKey.fromString(\n            document.getElementById('postingKey').value\n        );\n    } catch (e) {\n        const resultEl = document.getElementById('result');\n        resultEl.className = 'form-control-plaintext alert alert-danger';\n        resultEl.innerHTML = e.message + ' - See console for full error.';\n        throw e;\n    }\n};\n\n\n\n3. Input variables\n\nThe required parameters for the vote operation is recorded via an HTML UI that can be found in the public/index.html file. The values are pre-populated in this case with a testnet demo account. The vote weight is input via a slider as this value can range between -10000 and 10000 denoting either a 100% flag or 100% upvote.\n\nThe parameter values are allocated as seen below, once the user clicks on the “Submit” button.\n\nwindow.submitVote = async () =&gt; {\n    //we'll make use of resultEl in multiple child scopes. This is generally good practice.\n    const resultEl = document.getElementById('result');\n    resultEl.innerHTML = 'pending...';\n\n    //get all values from the UI//\n    //get account name of voter\n    const voter = document.getElementById('username').value;\n    //get private posting key\n    const privateKey = createPrivateKey();\n    //get author of post/comment to vote\n    const author = document.getElementById('author').value;\n    //get post permalink to vote\n    const permlink = document.getElementById('permlink').value;\n    //get weight of vote\n    const weight = parseInt(\n        document.getElementById('currentWeight').innerHTML,\n        10\n    );\n    ....\n\n\n\nThe weight parameter is required to be an interger for the vote operation so we parse it from the UI text field. The permlink value is retrieved from the create post function.\n\n4. Broadcast\n\nWe create a vote object with the input variables before we can broadcast to the blockchain.\n\nconst vote = {\n    voter,\n    author,\n    permlink,\n    weight, //needs to be an integer for the vote function\n};\n\n\n\nAfter which we can complete the broadcast.vote operation with the created object and private posting key received from the input UI. The result of the vote is displayed on the UI to confirm whether it was a success or failed with details of that process being displayed on the console.\n\nclient.broadcast.vote(vote, privateKey).then(\n        function(result) {\n            console.log('success:', result);\n            resultEl.className = 'form-control-plaintext alert alert-success';\n            resultEl.innerHTML = 'Success! See console for full response.';\n        },\n        function(error) {\n            console.log('error:', error);\n            resultEl.className = 'form-control-plaintext alert alert-danger';\n            resultEl.innerHTML =\n                error.jse_shortmsg + ' - See console for full response.';\n        }\n    );\n\nwindow.onload = () =&gt; {\n    var voteWeightSlider = document.getElementById('voteWeight');\n    var currentWeightDiv = document.getElementById('currentWeight');\n    currentWeightDiv.innerHTML = voteWeightSlider.value;\n    voteWeightSlider.oninput = function() {\n        currentWeightDiv.innerHTML = this.value;\n    };\n\n\n\nMore information on how to use the broadcast operation and options surrounding the operation can be found on the Steem Devportal\n\nTo run this tutorial\n\n\n  clone this repo\n  cd tutorials/17_vote_on_content\n  npm i\n  npm run dev-server or npm run start\n  After a few moments, the server should be running at http://localhost:3000/"
						}
						
					
				
			
		
			
				
					
						,
						
						"tutorials-python-get-account-comments": {
							"id": "tutorials-python-get-account-comments",
							"title": "PY: Get Account Comments",
							"category": "tutorials-python",
							"description": "This tutorial pulls a list of comments made by selected account from the blockchain",
		  				"type": "",
							"url": "/#tutorials-pythonget_account_comments",
							"content": "Full, runnable src of Get Account Comments can be downloaded as part of the PY tutorials repository.\n\n\nThis tutorial will explain and show you how to access the Steem blockchain using the steem-python library to fetch list of posts to randomize account list and get replies of selected account.\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nSteem python library has built-in function to get comments list made by specific account. Since we don’t have predefined account list, we will fetch newly created posts and show their authors for selection and give option to choose one account to get its comments. get_discussions_by_comments function fetches list of comments made by account. Note that get_discussions_by_created filter is used for fetching 5 posts and after selection of its author tutorial uses author of the post to fetch that account’s comments.\n\nSteps\n\n\n  App setup - Library install and import\n  Post list - List of posts to select from created filter\n  Comments list - Get comments list made by selected account\n  Print output - Print results in output\n\n\n1. App setup \n\nIn this tutorial we use 3 packages, pick - helps us to select filter interactively. steem - steem-python library, interaction with Blockchain. pprint - print results in better format.\n\nFirst we import all three library and initialize Steem class\n\n    import pprint\n    from pick import pick\n    # initialize Steem class\n    from steem import Steem\n\n    s = Steem()\n\n\n\n2. Post list \n\nNext we will fetch and make list of accounts and setup pick properly.\n\n    query = {\n      \"limit\":5, #number of posts\n      \"tag\":\"\" #tag of posts\n    }\n    #author list from created post list to randomize account list\n    posts = s.get_discussions_by_created(query)\n\n    title = 'Please choose account: '\n    options = []\n    #accounts list\n    for post in posts:\n      options.append(post[\"author\"])\n\n    # get index and selected account name\n    option, index = pick(options, title)\n\n\n\nThis will show us list of accounts to select in terminal/command prompt. And after selection we will get account name as a option variable.\n\n3. Comments list \n\nNext we will form another query to get comments list of account\n\n  query2 = {\n    \"limit\":5, #number of comments\n    \"start_author\":option #selected user\n  }\n\n  # get comments of selected account\n  comments = s.get_discussions_by_comments(query2)\n\n\n\nNote that start_author variable in query should be account name so that get_discussions_by_comments can provide us corrent information.\n\n4. Print output \n\nNext, we will print result, comments of selected account and details of each comment.\n\n  # print comment details for selected account\n  pprint.pprint(comments)\n  pprint.pprint(\"Selected: \"+option)\n\n\n\nThe example of result returned from the service is a JSON object with the following properties:\n\n[{'abs_rshares': 0,\n  'active': '2018-06-21T06:48:57',\n  'active_votes': [],\n  'allow_curation_rewards': True,\n  'allow_replies': True,\n  'allow_votes': True,\n  'author': 'rakibmaruf24',\n  'author_reputation': '115387353393',\n  'author_rewards': 0,\n  'beneficiaries': [],\n  'body': \"That extra push will take you Back- That's my opinion .\",\n  'body_length': 55,\n  'cashout_time': '2018-06-28T06:48:57',\n  'category': 'life',\n  'children': 0,\n  'children_abs_rshares': 0,\n  'created': '2018-06-21T06:48:57',\n  'curator_payout_value': '0.000 SBD',\n  'depth': 1,\n  'id': 53788647,\n  'json_metadata': '{\"tags\":[\"life\"],\"app\":\"steemit/0.1\"}',\n  'last_payout': '1970-01-01T00:00:00',\n  'last_update': '2018-06-21T06:48:57',\n  'max_accepted_payout': '1000000.000 SBD',\n  'max_cashout_time': '1969-12-31T23:59:59',\n  'net_rshares': 0,\n  'net_votes': 0,\n  'parent_author': 'blazing',\n  'parent_permlink': 'that-extra-push-will-take-you-forward',\n  'pending_payout_value': '0.000 SBD',\n  'percent_steem_dollars': 10000,\n  'permlink': 're-blazing-that-extra-push-will-take-you-forward-20180621t064855012z',\n  'promoted': '0.000 SBD',\n  'reblogged_by': [],\n  'replies': [],\n  'reward_weight': 10000,\n  'root_author': 'blazing',\n  'root_permlink': 'that-extra-push-will-take-you-forward',\n  'root_title': 'That extra push will take you forward ',\n  'title': '',\n  'total_payout_value': '0.000 SBD',\n  'total_pending_payout_value': '0.000 STEEM',\n  'total_vote_weight': 0,\n  'url': '/life/@blazing/that-extra-push-will-take-you-forward#@rakibmaruf24/re-blazing-that-extra-push-will-take-you-forward-20180621t064855012z',\n  'vote_rshares': 0},\n {'abs_rshares': 0,\n  'active': '2018-06-01T18:36:06',\n  'active_votes': [{'percent': 200,\n                    'reputation': '26818436016691',\n                    'rshares': '16086534528',\n                    'time': '2018-06-01T21:42:09',\n                    'voter': 'gamer00',\n                    'weight': 65289},\n                   {'percent': 800,\n                    'reputation': '7605717819625',\n                    'rshares': '7561308944',\n                    'time': '2018-06-01T18:44:51',\n                    'voter': 'markkujantunen',\n                    'weight': 90456}],\n  'allow_curation_rewards': True,\n  'allow_replies': True,\n  'allow_votes': True,\n  'author': 'rakibmaruf24',\n  'author_reputation': '115387353393',\n  'author_rewards': 29,\n  'beneficiaries': [],\n  'body': \"How did it worked ? I don't understand about this brother.\",\n  'body_length': 58,\n  'cashout_time': '1969-12-31T23:59:59',\n  'category': 'finland',\n  'children': 1,\n  'children_abs_rshares': 0,\n  'created': '2018-06-01T17:56:15',\n  'curator_payout_value': '0.018 SBD',\n  'depth': 1,\n  'id': 51280699,\n  'json_metadata': '{\"tags\":[\"finland\"],\"app\":\"steemit/0.1\"}',\n  'last_payout': '2018-06-08T17:56:15',\n  'last_update': '2018-06-01T17:56:15',\n  'max_accepted_payout': '1000000.000 SBD',\n  'max_cashout_time': '1969-12-31T23:59:59',\n  'net_rshares': 0,\n  'net_votes': 2,\n  'parent_author': 'markkujantunen',\n  'parent_permlink': 'mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions',\n  'pending_payout_value': '0.000 SBD',\n  'percent_steem_dollars': 10000,\n  'permlink': 're-markkujantunen-mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions-20180601t175605072z',\n  'promoted': '0.000 SBD',\n  'reblogged_by': [],\n  'replies': [],\n  'reward_weight': 10000,\n  'root_author': 'markkujantunen',\n  'root_permlink': 'mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions',\n  'root_title': 'Mein Kampf Gegen Den Löwenzahn/My Struggle Against The '\n                'Dandelion',\n  'title': '',\n  'total_payout_value': '0.067 SBD',\n  'total_pending_payout_value': '0.000 STEEM',\n  'total_vote_weight': 0,\n  'url': '/finland/@markkujantunen/mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions#@rakibmaruf24/re-markkujantunen-mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions-20180601t175605072z',\n  'vote_rshares': 0}\n]\n\n\n\nFrom this result you have access to everything associated to the comments of account including content of comment, timestamp, active_votes, etc., so that you can use in further development of your application with Python.\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/09_get_account_comments\n  pip install -r requirements.txt\n  python index.py\n  After a few moments, you should see output in terminal/command prompt screen."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-get-account-replies": {
							"id": "tutorials-python-get-account-replies",
							"title": "PY: Get Account Replies",
							"category": "tutorials-python",
							"description": "By the end of this tutorial you would know how to get replies made on particular accounts content",
		  				"type": "",
							"url": "/#tutorials-pythonget_account_replies",
							"content": "Full, runnable src of Get Account Replies can be downloaded as part of the PY tutorials repository.\n\n\nThis tutorial will explain and show you how to access the Steem blockchain using the steem-python library to fetch a list of comments made on a specific accounts content.\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nIn Steem there are built-in functions in the official library steem-python that we are going to use throughout all Python tutorials. For this one we are using the get_replies function.\n\nSteps\n\n\n  App setup - Library install and import\n  Post list - List of filters to select from\n  Comment details - Form a query\n  Print output - Print results in output\n\n\n1. App setup \n\nIn this tutorial we use 3 packages, pick - helps us to select filter interactively. steem - steem-python library, interaction with Blockchain. pprint - print results in better format.\n\nFirst we import all three library and initialize Steem class\n\n    import pprint\n    from pick import pick\n    # initialize Steem class\n    from steem import Steem\n\n    s = Steem()\n\n\n\n2. Post list \n\nNext we will fetch and make a list of posts and setup pick properly.\n\n    query = {\n        \"limit\":5, #number of posts\n        \"tag\":\"\" #tag of posts\n    }\n    #post list for selected query\n    #we are merely using this to display the most recent posters\n    #the 'author' can easily be changed to any value within the 'get_replies' function\n\n    posts = s.get_discussions_by_created(query)\n\n    title = 'Please choose author: '\n    options = []\n    #posts list\n    for post in posts:\n        options.append(post[\"author\"]+'/'+post[\"permlink\"])\n    # get index and selected filter name\n    option, index = pick(options, title)\n    # option is printed as reference\n    pprint.pprint(\"Selected: \"+option)\n\n\n\nThis will show us list of posts to select in terminal/command prompt. And after selection we will get index and post name to index and option variables. We will also print the selection on screen for easy reference.\n\n3. Comment details \n\nNext we will allocate variables to make the function easier to use as well as provide a limit for the number of replies that we want to print. To retreive the replies we only need the author variable. This is then used in the get_replies function present in the steem library.\n\n    # allocate variables\n    _author = posts[index][\"author\"]\n    _limit = 1\n\n    # get replies for specific author\n    details = s.get_replies(_author)\n\n\n\n4. Print output \n\nNext, we will print the details obtained from the function. Because we only want to print a limited number, we input the values in the form of an array.\n\n    # print specified number of comments\n\n    pprint.pprint(details[:_limit])\n\n\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/08_get_account_replies\n  pip install -r requirements.txt\n  python index.py\n  \n    After a few moments, you should see output in terminal/command prompt screen."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-get-post-details": {
							"id": "tutorials-python-get-post-details",
							"title": "PY: Get Post Details",
							"category": "tutorials-python",
							"description": "This tutorial pulls a list of the posts from the blockchain with created filter and tag then display selected post details",
		  				"type": "",
							"url": "/#tutorials-pythonget_post_details",
							"content": "Full, runnable src of Get Post Details can be downloaded as part of the PY tutorials repository.\n\n\nThis tutorial will explain and show you how to access the Steem blockchain using the steem-python library to fetch list of posts filtered by a filter and tag\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nSteem python library has built-in function to get details of post with author and permlink as an argument. Since we don’t have predefined post or author/permlink. We will fetch post list from previous tutorial and give option to choose one option/post to get its details. get_content function fetches latest state of the post and delivers its details. Note that get_discussions_by_created filter is used for fetching 5 posts which by default contains details of each post, but for purpose of this tutorial we will showcase get_content function to fetch details.\n\nSteps\n\n\n  App setup - Library install and import\n  Post list - List of posts to select from created filter\n  Post details - Get post details for selected post\n  Print output - Print results in output\n\n\n1. App setup \n\nIn this tutorial we use 3 packages, pick - helps us to select filter interactively. steem - steem-python library, interaction with Blockchain. pprint - print results in better format.\n\nFirst we import all three library and initialize Steem class\n\n    import pprint\n    from pick import pick\n    # initialize Steem class\n    from steem import Steem\n\n    s = Steem()\n\n\n\n2. Post list \n\nNext we will fetch and make list of posts and setup pick properly.\n\n    query = {\n        \"limit\":5, #number of posts\n        \"tag\":\"\" #tag of posts\n        }\n    #post list for selected query\n    posts = s.get_discussions_by_created(query)\n\n    title = 'Please choose post: '\n    options = []\n    #posts list options\n    for post in posts:\n        options.append(post[\"author\"]+'/'+post[\"permlink\"])\n    # get index and selected filter name\n    option, index = pick(options, title)\n\n\n\nThis will show us list of posts to select in terminal/command prompt. And after selection we will get index and post name to index and option variables.\n\n3. Post details \n\nNext we will fetch post details with get_content. By default get_discussions_by_created function already contains post details, but for this tutorial purpose we will ignore all other fields but only use author and permlink fields to fetch fresh post details.\n\n\ndetails = s.get_content(posts[index][\"author\"],posts[index][\"permlink\"])\n\n\n\n4. Print output \n\nNext, we will print result, details of selected post.\n\n    # print post details for selected post\n    pprint.pprint(details)\n    pprint.pprint(\"Selected: \"+option)\n\n\n\nThe example of result returned from the service is a JSON object with the following properties:\n\n{\n    \"id\": 37338948,\n    \"author\": \"steemitblog\",\n    \"permlink\": \"join-team-steemit-at-tokenfest\",\n    \"category\": \"steemit\",\n    \"parent_author\": \"\",\n    \"parent_permlink\": \"steemit\",\n    \"title\": \"Join Team Steemit at TokenFest!\",\n    \"body\":\n        \"&lt;a href=\\\"https://tokenfest.adria.digital\\\"&gt;&lt;img src=\\\"https://i.imgur.com/fOScDIW.png\\\"/&gt;&lt;/a&gt;\\n\\nHello Steemians! If you’d like to meet Team Steemit live-in-person, or are just interested in attending what promises to be a great blockchain conference, join us at &lt;a href=\\\"https://tokenfest.adria.digital/\\\"&gt;TokenFest&lt;/a&gt; in San Francisco from March 15th to 16th. \\n\\nSteemit CEO, Ned Scott, will be participating in a fireside chat alongside Steemit’s CTO, Harry Schmidt, as well as the creator of Utopian.io, Diego Pucci. Steemit will also be hosting the opening party on Thursday night and we’d certainly love to meet as many of you as possible IRL, so head on over to https://tokenfest.adria.digital/ and get your tickets while you can. \\n\\n*Team Steemit*\",\n    \"json_metadata\":\n        \"{\\\"tags\\\":[\\\"steemit\\\",\\\"tokenfest\\\",\\\"conference\\\"],\\\"image\\\":[\\\"https://i.imgur.com/fOScDIW.png\\\"],\\\"links\\\":[\\\"https://tokenfest.adria.digital\\\",\\\"https://tokenfest.adria.digital/\\\"],\\\"app\\\":\\\"steemit/0.1\\\",\\\"format\\\":\\\"markdown\\\"}\",\n    \"last_update\": \"2018-03-07T23:22:54\",\n    \"created\": \"2018-03-07T20:56:36\",\n    \"active\": \"2018-03-13T01:40:21\",\n    \"last_payout\": \"1970-01-01T00:00:00\",\n    \"depth\": 0,\n    \"children\": 29,\n    \"net_rshares\": \"11453442114933\",\n    \"abs_rshares\": \"11454054795840\",\n    \"vote_rshares\": \"11454054795840\",\n    \"children_abs_rshares\": \"13568695606090\",\n    \"cashout_time\": \"2018-03-14T20:56:36\",\n    \"max_cashout_time\": \"1969-12-31T23:59:59\",\n    \"total_vote_weight\": 3462435,\n    \"reward_weight\": 10000,\n    \"total_payout_value\": \"0.000 SBD\",\n    \"curator_payout_value\": \"0.000 SBD\",\n    \"author_rewards\": 0,\n    \"net_votes\": 77,\n    \"root_comment\": 37338948,\n    \"max_accepted_payout\": \"0.000 SBD\",\n    \"percent_steem_dollars\": 10000,\n    \"allow_replies\": true,\n    \"allow_votes\": true,\n    \"allow_curation_rewards\": true,\n    \"beneficiaries\": [],\n    \"url\": \"/steemit/@steemitblog/join-team-steemit-at-tokenfest\",\n    \"root_title\": \"Join Team Steemit at TokenFest!\",\n    \"pending_payout_value\": \"46.436 SBD\",\n    \"total_pending_payout_value\": \"0.000 STEEM\",\n    \"active_votes\": [\n        {\n            \"voter\": \"steemitblog\",\n            \"weight\": 0,\n            \"rshares\": \"1870813909383\",\n            \"percent\": 10000,\n            \"reputation\": \"128210130644387\",\n            \"time\": \"2018-03-07T20:56:36\"\n        },\n        {\n            \"voter\": \"kevinwong\",\n            \"weight\": 526653,\n            \"rshares\": \"2208942520687\",\n            \"percent\": 5000,\n            \"reputation\": \"374133832002581\",\n            \"time\": \"2018-03-08T04:27:00\"\n        }\n    ],\n    \"replies\": [],\n    \"author_reputation\": \"128210130644387\",\n    \"promoted\": \"0.000 SBD\",\n    \"body_length\": 754,\n    \"reblogged_by\": []\n}\n'Selected: steemitblog/join-team-steemit-at-tokenfest'\n\n\n\nFrom this result you have access to everything associated to the post including additional metadata which is a JSON string (that must be decoded to use), active_votes info, post title, body, etc. details that can be used in further development of application with Python.\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/02_get_post_details\n  pip install -r requirements.txt\n  python index.py\n  After a few moments, you should see output in terminal/command prompt screen."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-get-post-replies": {
							"id": "tutorials-python-get-post-replies",
							"title": "PY: Get Post Replies",
							"category": "tutorials-python",
							"description": "This tutorial pulls a list of replies on selected post from the blockchain",
		  				"type": "",
							"url": "/#tutorials-pythonget_post_replies",
							"content": "Full, runnable src of Get Post Replies can be downloaded as part of the PY tutorials repository.\n\n\nThis tutorial will explain and show you how to access the Steem blockchain using the steem-python library to fetch list of posts and get replies info on selected post.\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nSteem python library has built-in function to get active voters information if post with author and permlink as an argument. Since we don’t have predefined post or author/permlink. We will fetch post list from previous tutorial and give option to choose one post to get its active voters. get_content_replies function fetches list of replies on content. Note that get_discussions_by_hot filter is used for fetching 5 posts and after selection of post tutorial uses author and permlink of the post to fetch replies.\n\nSteps\n\n\n  App setup - Library install and import\n  Post list - List of posts to select from created filter\n  Replies list - Get replies list for selected post\n  Print output - Print results in output\n\n\n1. App setup \n\nIn this tutorial we use 3 packages, pick - helps us to select filter interactively. steem - steem-python library, interaction with Blockchain. pprint - print results in better format.\n\nFirst we import all three library and initialize Steem class\n\n    import pprint\n    from pick import pick\n    # initialize Steem class\n    from steem import Steem\n\n    s = Steem()\n\n\n\n2. Post list \n\nNext we will fetch and make list of posts and setup pick properly.\n\n    query = {\n        \"limit\":5, #number of posts\n        \"tag\":\"\" #tag of posts\n        }\n    #post list for selected query\n    posts = s.get_discussions_by_hot(query)\n\n    title = 'Please choose post: '\n    options = []\n    #posts list options\n    for post in posts:\n        options.append(post[\"author\"]+'/'+post[\"permlink\"])\n    # get index and selected filter name\n    option, index = pick(options, title)\n\n\n\nThis will show us list of posts to select in terminal/command prompt. And after selection we will get index and post name to index and option variables.\n\n3. Replies list \n\nNext we will replies on selected post with get_content_replies.\n\n  # get replies for given post\n  replies = s.get_content_replies(posts[index][\"author\"],posts[index][\"permlink\"])\n\n\n\n4. Print output \n\nNext, we will print result, replies on selected post, selected post details and number of replies.\n\n  # print post details for selected post\n  pprint.pprint(replies)\n  pprint.pprint(\"Selected: \"+option)\n  pprint.pprint(\"Number of replies: \"+str(len(replies)))\n\n\n\nThe example of result returned from the service is a JSON object with the following properties:\n\n[{'abs_rshares': 0,\n  'active': '2018-06-15T10:43:36',\n  'active_votes': [],\n  'allow_curation_rewards': True,\n  'allow_replies': True,\n  'allow_votes': True,\n  'author': 'sarcasms',\n  'author_reputation': 1086863019,\n  'author_rewards': 0,\n  'beneficiaries': [],\n  'body': 'follow us for news, media, memes, sports updates and lots '\n          'more...',\n  'body_length': 0,\n  'cashout_time': '2018-06-22T10:43:36',\n  'category': 'fiction',\n  'children': 0,\n  'children_abs_rshares': 0,\n  'created': '2018-06-15T10:43:36',\n  'curator_payout_value': '0.000 SBD',\n  'depth': 1,\n  'id': 53110589,\n  'json_metadata': '{\"tags\":[\"fiction\"],\"users\":[\"sarcasms\"],\"app\":\"steemit/0.1\"}',\n  'last_payout': '1970-01-01T00:00:00',\n  'last_update': '2018-06-15T10:43:36',\n  'max_accepted_payout': '1000000.000 SBD',\n  'max_cashout_time': '1969-12-31T23:59:59',\n  'net_rshares': 0,\n  'net_votes': 0,\n  'parent_author': 'muratkbesiroglu',\n  'parent_permlink': 'short-sci-fi-story-the-android-that-sell-meaning',\n  'pending_payout_value': '0.000 SBD',\n  'percent_steem_dollars': 10000,\n  'permlink': 're-muratkbesiroglu-short-sci-fi-story-the-android-that-sell-meaning-20180615t104323737z',\n  'promoted': '0.000 SBD',\n  'reblogged_by': [],\n  'replies': [],\n  'reward_weight': 10000,\n  'root_author': 'muratkbesiroglu',\n  'root_permlink': 'short-sci-fi-story-the-android-that-sell-meaning',\n  'root_title': 'Short Sci-Fi Story: The Android That Sell Meaning',\n  'title': '',\n  'total_payout_value': '0.000 SBD',\n  'total_pending_payout_value': '0.000 STEEM',\n  'total_vote_weight': 0,\n  'url': '/fiction/@muratkbesiroglu/short-sci-fi-story-the-android-that-sell-meaning#@sarcasms/re-muratkbesiroglu-short-sci-fi-story-the-android-that-sell-meaning-20180615t104323737z',\n  'vote_rshares': 0},\n {'abs_rshares': 0,\n  'active': '2018-06-15T11:26:15',\n  'active_votes': [],\n  'allow_curation_rewards': True,\n  'allow_replies': True,\n  'allow_votes': True,\n  'author': 'vicky3585',\n  'author_reputation': 40338001,\n  'author_rewards': 0,\n  'beneficiaries': [],\n  'body': 'lovely story keep it up...',\n  'body_length': 0,\n  'cashout_time': '2018-06-22T11:26:15',\n  'category': 'fiction',\n  'children': 0,\n  'children_abs_rshares': 0,\n  'created': '2018-06-15T11:26:15',\n  'curator_payout_value': '0.000 SBD',\n  'depth': 1,\n  'id': 53114015,\n  'json_metadata': '{\"tags\":[\"fiction\"],\"app\":\"steemit/0.1\"}',\n  'last_payout': '1970-01-01T00:00:00',\n  'last_update': '2018-06-15T11:26:15',\n  'max_accepted_payout': '1000000.000 SBD',\n  'max_cashout_time': '1969-12-31T23:59:59',\n  'net_rshares': 0,\n  'net_votes': 0,\n  'parent_author': 'muratkbesiroglu',\n  'parent_permlink': 'short-sci-fi-story-the-android-that-sell-meaning',\n  'pending_payout_value': '0.000 SBD',\n  'percent_steem_dollars': 10000,\n  'permlink': 're-muratkbesiroglu-short-sci-fi-story-the-android-that-sell-meaning-20180615t112615204z',\n  'promoted': '0.000 SBD',\n  'reblogged_by': [],\n  'replies': [],\n  'reward_weight': 10000,\n  'root_author': 'muratkbesiroglu',\n  'root_permlink': 'short-sci-fi-story-the-android-that-sell-meaning',\n  'root_title': 'Short Sci-Fi Story: The Android That Sell Meaning',\n  'title': '',\n  'total_payout_value': '0.000 SBD',\n  'total_pending_payout_value': '0.000 STEEM',\n  'total_vote_weight': 0,\n  'url': '/fiction/@muratkbesiroglu/short-sci-fi-story-the-android-that-sell-meaning#@vicky3585/re-muratkbesiroglu-short-sci-fi-story-the-android-that-sell-meaning-20180615t112615204z',\n  'vote_rshares': 0}]\n'Selected: muratkbesiroglu/short-sci-fi-story-the-android-that-sell-meaning'\n'Number of replies: 18'\n\n\n\nFrom this result you have access to everything associated to the replies including content of reply, author, timestamp, etc., so that you can be use in further development of application with Python.\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/04_get_post_replies\n  pip install -r requirements.txt\n  python index.py\n  After a few moments, you should see output in terminal/command prompt screen."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-get-posts": {
							"id": "tutorials-python-get-posts",
							"title": "PY: Get Posts",
							"category": "tutorials-python",
							"description": "This tutorial pulls a list of the posts from the blockchain with selected filter and tag then displays output",
		  				"type": "",
							"url": "/#tutorials-pythonget_posts",
							"content": "Full, runnable src of Get Posts can be downloaded as part of the PY tutorials repository.\n\n\nThis tutorial will explain and show you how to access the Steem blockchain using the steem-python library to fetch list of posts filtered by a filter and tag\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nIn Steem there are built-in filters trending, hot, created, active, promoted etc. which helps us to get list of posts. get_discussions_by_trending(query), get_discussions_by_hot(query), get_discussions_by_created(query), etc. functions are built-in in official library steem-python that we are going to use throughout all Python tutorials.\n\nSteps\n\n\n  App setup - Library install and import\n  Filters list - List of filters to select from\n  Query details - Form a query\n  Print output - Print results in output\n\n\n1. App setup \n\nIn this tutorial we use 3 packages, pick - helps us to select filter interactively. steem - steem-python library, interaction with Blockchain. pprint - print results in better format.\n\nFirst we import all three library and initialize Steem class\n\n    import pprint\n    from pick import pick\n    # initialize Steem class\n    from steem import Steem\n\n    s = Steem()\n\n\n\n2. Filters list \n\nNext we will make list of filters and setup pick properly.\n\n    title = 'Please choose filter: '\n    #filters list\n    options = ['trending', 'hot', 'active', 'created', 'promoted']\n    # get index and selected filter name\n    option, index = pick(options, title)\n\n\n\nThis will show us list of filters to select in terminal/command prompt. And after selection we will get index and filter name to index and option variables.\n\n3. Query details \n\nNext we will form a query. In Steem,\n\n\n  You can add a tag to filter the posts that you receive from the server\n  You can also limit the amount of results you would like to receive from the query\n\n\nquery = {\n    \"limit\":2, #number of posts\n    \"tag\":\"\" #tag of posts\n    }\n#post list for selected query\nposts = {0: s.get_discussions_by_trending(query),\n         1: s.get_discussions_by_hot(query),\n         2: s.get_discussions_by_active(query),\n         3: s.get_discussions_by_created(query),\n         4: s.get_discussions_by_promoted(query)\n}\n\n\n\nAbove code shows example of query and simple list of function that will fetch post list with user selected filter.\n\n4. Print output \n\nNext, we will print result, post list and selected filter name.\n\n    # print post list for selected filter\n    pprint.pprint(posts[index])\n    pprint.pprint(\"Selected: \"+option)\n\n\n\nThe example of result returned from the service is a JSON object with the following properties:\n\n[\n    {\n        \"id\": 37338948,\n        \"author\": \"steemitblog\",\n        \"permlink\": \"join-team-steemit-at-tokenfest\",\n        \"category\": \"steemit\",\n        \"parent_author\": \"\",\n        \"parent_permlink\": \"steemit\",\n        \"title\": \"Join Team Steemit at TokenFest!\",\n        \"body\":\n            \"&lt;a href=\\\"https://tokenfest.adria.digital\\\"&gt;&lt;img src=\\\"https://i.imgur.com/fOScDIW.png\\\"/&gt;&lt;/a&gt;\\n\\nHello Steemians! If you’d like to meet Team Steemit live-in-person, or are just interested in attending what promises to be a great blockchain conference, join us at &lt;a href=\\\"https://tokenfest.adria.digital/\\\"&gt;TokenFest&lt;/a&gt; in San Francisco from March 15th to 16th. \\n\\nSteemit CEO, Ned Scott, will be participating in a fireside chat alongside Steemit’s CTO, Harry Schmidt, as well as the creator of Utopian.io, Diego Pucci. Steemit will also be hosting the opening party on Thursday night and we’d certainly love to meet as many of you as possible IRL, so head on over to https://tokenfest.adria.digital/ and get your tickets while you can. \\n\\n*Team Steemit*\",\n        \"json_metadata\":\n            \"{\\\"tags\\\":[\\\"steemit\\\",\\\"tokenfest\\\",\\\"conference\\\"],\\\"image\\\":[\\\"https://i.imgur.com/fOScDIW.png\\\"],\\\"links\\\":[\\\"https://tokenfest.adria.digital\\\",\\\"https://tokenfest.adria.digital/\\\"],\\\"app\\\":\\\"steemit/0.1\\\",\\\"format\\\":\\\"markdown\\\"}\",\n        \"last_update\": \"2018-03-07T23:22:54\",\n        \"created\": \"2018-03-07T20:56:36\",\n        \"active\": \"2018-03-13T01:40:21\",\n        \"last_payout\": \"1970-01-01T00:00:00\",\n        \"depth\": 0,\n        \"children\": 29,\n        \"net_rshares\": \"11453442114933\",\n        \"abs_rshares\": \"11454054795840\",\n        \"vote_rshares\": \"11454054795840\",\n        \"children_abs_rshares\": \"13568695606090\",\n        \"cashout_time\": \"2018-03-14T20:56:36\",\n        \"max_cashout_time\": \"1969-12-31T23:59:59\",\n        \"total_vote_weight\": 3462435,\n        \"reward_weight\": 10000,\n        \"total_payout_value\": \"0.000 SBD\",\n        \"curator_payout_value\": \"0.000 SBD\",\n        \"author_rewards\": 0,\n        \"net_votes\": 77,\n        \"root_comment\": 37338948,\n        \"max_accepted_payout\": \"0.000 SBD\",\n        \"percent_steem_dollars\": 10000,\n        \"allow_replies\": true,\n        \"allow_votes\": true,\n        \"allow_curation_rewards\": true,\n        \"beneficiaries\": [],\n        \"url\": \"/steemit/@steemitblog/join-team-steemit-at-tokenfest\",\n        \"root_title\": \"Join Team Steemit at TokenFest!\",\n        \"pending_payout_value\": \"46.436 SBD\",\n        \"total_pending_payout_value\": \"0.000 STEEM\",\n        \"active_votes\": [\n            {\n                \"voter\": \"steemitblog\",\n                \"weight\": 0,\n                \"rshares\": \"1870813909383\",\n                \"percent\": 10000,\n                \"reputation\": \"128210130644387\",\n                \"time\": \"2018-03-07T20:56:36\"\n            },\n            {\n                \"voter\": \"kevinwong\",\n                \"weight\": 526653,\n                \"rshares\": \"2208942520687\",\n                \"percent\": 5000,\n                \"reputation\": \"374133832002581\",\n                \"time\": \"2018-03-08T04:27:00\"\n            }\n        ],\n        \"replies\": [],\n        \"author_reputation\": \"128210130644387\",\n        \"promoted\": \"0.000 SBD\",\n        \"body_length\": 754,\n        \"reblogged_by\": []\n    },\n    {\n\n    }\n]\n'Selected: hot'\n\n\n\nFrom this result you have access to everything associated to the posts including additional metadata which is a JSON string (that must be decoded to use), active_votes info, post title, body, etc. details that can be used in further development of application with Python.\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/01_get_posts\n  pip install -r requirements.txt\n  python index.py\n  After a few moments, you should see output in terminal/command prompt screen."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-get-voters-list": {
							"id": "tutorials-python-get-voters-list",
							"title": "PY: Get Voters List",
							"category": "tutorials-python",
							"description": "This tutorial pulls a list of the voters on selected post from the blockchain",
		  				"type": "",
							"url": "/#tutorials-pythonget_voters_list",
							"content": "Full, runnable src of Get Voters List can be downloaded as part of the PY tutorials repository.\n\n\nThis tutorial will explain and show you how to access the Steem blockchain using the steem-python library to fetch list of posts and get voters info on selected post.\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nSteem python library has built-in function to get active voters information if post with author and permlink as an argument. Since we don’t have predefined post or author/permlink. We will fetch post list from previous tutorial and give option to choose one post to get its active voters. get_active_votes function fetches list of active voters on content. Note that get_discussions_by_active filter is used for fetching 5 posts which by default contains active_votes of each post, but for purpose of this tutorial we will use get_active_votes function to fetch voters info.\n\nSteps\n\n\n  App setup - Library install and import\n  Post list - List of posts to select from created filter\n  Voters list - Get voters list for selected post\n  Print output - Print results in output\n\n\n1. App setup \n\nIn this tutorial we use 3 packages, pick - helps us to select filter interactively. steem - steem-python library, interaction with Blockchain. pprint - print results in better format.\n\nFirst we import all three library and initialize Steem class\n\n    import pprint\n    from pick import pick\n    # initialize Steem class\n    from steem import Steem\n\n    s = Steem()\n\n\n\n2. Post list \n\nNext we will fetch and make list of posts and setup pick properly.\n\n    query = {\n        \"limit\":5, #number of posts\n        \"tag\":\"\" #tag of posts\n        }\n    #post list for selected query\n    posts = s.get_discussions_by_active(query)\n\n    title = 'Please choose post: '\n    options = []\n    #posts list options\n    for post in posts:\n        options.append(post[\"author\"]+'/'+post[\"permlink\"])\n    # get index and selected filter name\n    option, index = pick(options, title)\n\n\n\nThis will show us list of posts to select in terminal/command prompt. And after selection we will get index and post name to index and option variables.\n\n3. Voters list \n\nNext we will fetch active votes on selected post with get_active_votes. By default get_discussions_by_active function already contains active_votes list, but for this tutorial purpose we will ignore all other fields but only use author and permlink fields to fetch voters list.\n\n\nvoters = s.get_active_votes(posts[index][\"author\"],posts[index][\"permlink\"])\n\n\n\n4. Print output \n\nNext, we will print result, details of selected post.\n\n    # print voters list for selected post\n    pprint.pprint(voters)\n    pprint.pprint(\"Selected: \"+option)\n\n\n\nThe example of result returned from the service is a JSON object with the following properties:\n\n[{'percent': 100,\n  'reputation': '4675452335798',\n  'rshares': 174045922,\n  'time': '2018-06-13T05:27:06',\n  'voter': 'ubg',\n  'weight': 663},\n {'percent': 3000,\n  'reputation': 0,\n  'rshares': '52213408920',\n  'time': '2018-06-13T12:53:30',\n  'voter': 'warofcraft',\n  'weight': 99589},\n {'percent': 10000,\n  'reputation': '16976056264304',\n  'rshares': '41495494555',\n  'time': '2018-06-13T08:56:00',\n  'voter': 'jiahn',\n  'weight': 80257}\n]\n'Selected: steemitblog/join-team-steemit-at-tokenfest'\n\n\n\nFrom this result you have access to everything associated to the voter including reputation of voter, timestamp, voter’s account name, percent and weight of vote, rshares reward shares values that you can be use in further development of application with Python.\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/03_get_voters_list\n  pip install -r requirements.txt\n  python index.py\n  After a few moments, you should see output in terminal/command prompt screen."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-getting-started": {
							"id": "tutorials-python-getting-started",
							"title": "PY: Getting Started",
							"category": "tutorials-python",
							"description": "The official Steem library for Python is steempython It comes with a BIP38 encrypted wallet and a practical CLI utility called steempy",
		  				"type": "",
							"url": "/#tutorials-pythongetting_started",
							"content": "Full, runnable src of Getting Started can be downloaded as part of the PY tutorials repository.\n\n\nThe library was designed to allow Python developers to easily access the network as well as build utilities and applications.\n\nCurrently steem-python documentation is generated in the standard pydoc format.\n\nDocumentation is available at: Official steem-python Docs.\n\n\n\nIn our Python tutorials we recommend developers to be familiar with following requirements/libraries.\n\n\n  \n    Python developer should be familiar with Python 3.x and above\n  \n  \n    Medium knowledge of package manager pip/pip3 and/or pipenv is required, since our tutorials will be using package manager to get started quickly.\n  \n  \n    Terminal (Linux/Mac) or Cmd (Windows command prompt) knowledge is also required, since most python tutorials will only work with terminal and print out result in different formats.\n  \n  \n    Python environment path should be set up properly so that terminal can access proper python library without conflicts.\n  \n  \n    Additional and optional packages that we might use: setuptools, brew\n  \n\n\nTo get started with Python, you can also check official Python installation and Python tutorial.\n\nTo get started with our Python tutorials, checkout our first tutorial here."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-reblog-post": {
							"id": "tutorials-python-reblog-post",
							"title": "PY: Reblog Post",
							"category": "tutorials-python",
							"description": "In this tutorial we will show how to reblog post with your username and posting private key",
		  				"type": "",
							"url": "/#tutorials-pythonreblog_post",
							"content": "Full, runnable src of Reblog Post can be downloaded as part of the PY tutorials repository.\n\n\nTutorial will also explain and show you how to sign/broadcast transaction on Steem blockchain using the steem-python library.\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nSteem python library has built-in function to commit transaction and broadcast it to the network.\n\nSteps\n\n\n  App setup - Library install and import\n  Post list - List of posts to select from trending filter\n  Enter user credentials - Enter user credentails to sign transaction\n\n\n1. App setup \n\nIn this tutorial we use 3 packages, pick - helps us to select filter interactively. steem - steem-python library, interaction with Blockchain. pprint - print results in better format.\n\nFirst we import all three library and initialize Steem class\n\n    import pprint\n    from pick import pick\n    # initialize Steem class\n    from steem import Steem\n\n    s = Steem()\n\n\n\n2. Post list \n\nNext we will fetch and make list of accounts and setup pick properly.\n\n    query = {\n      \"limit\":5, #number of posts\n      \"tag\":\"\" #tag of posts\n    }\n    # post list from trending post list\n    posts = s.get_discussions_by_trending(query)\n\n    title = 'Please choose post to reblog: '\n    options = []\n    # post list\n    for post in posts:\n      options.append('@'+post[\"author\"]+'/'+post[\"permlink\"])\n\n\n\n\nThis will show us list of posts to select in terminal/command prompt. And after selection we will get formatted post as an option variable.\n\n3. Enter user credentials \n\nNext in order to sign transaction, application asks for username and posting private key to sign transaction and broadcast it.\n\n  # get index and selected post\n  option, index = pick(options, title)\n  pprint.pprint(\"You selected: \"+option)\n\n  account = input(\"Enter your username? \")\n  wif = input(\"Enter your Posting private key? \")\n\n  # commit or build transaction\n  c = Commit(steem=Steem(keys=[wif]))\n\n  # broadcast transaction\n  c.resteem(option, account=account)\n\n\n\n\nThat’s it, if transaction is successful you shouldn’t see any error messages, otherwise you will be notified.\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/11_reblog_post\n  pip install -r requirements.txt\n  python index.py\n  After a few moments, you should see output in terminal/command prompt screen."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-submit-post": {
							"id": "tutorials-python-submit-post",
							"title": "PY: Submit Post",
							"category": "tutorials-python",
							"description": "By the end of this tutorial you should know how to submit a post to the Steem blockchain",
		  				"type": "",
							"url": "/#tutorials-pythonsubmit_post",
							"content": "Full, runnable src of Submit Post can be downloaded as part of the PY tutorials repository.\n\n\nThis tutorial will explain and show you how to submit a new post to the Steem blockchain using the commit class found within the steem-python library.\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nThe Steem python library has a built-in function to transmit transactions to the blockchain. We are using the post method found within the commit class in the the library. It should be noted that comments and new post are both treated as commit.post operation with the only difference being that a comment/reply has got an additional parameter containing the parent post/comment. There are 11 parameters within the post method:\n\n\n  title - The title of the post\n  body - The body of the post\n  author - The account that you are posting from\n  permlink - A unique adentifier for the\n  tags - Between 1 and 5 key words that defines the post\n  reply_idendifier - Identifier of the parent post(used for comments)\n  json_metadata - JSON meta objec that can be attached to the post\n  comment_options - JSON options object that can be attached to the post to specify additional options like ‘max_payouts’, ‘allow_votes’, etc.\n  community - Name of the community you are posting into\n  beneficiaries - A list of beneficiaries for posting reward distribution.\n  self_vote - Upvote the post as author right after posting\n\n\nWe will only be using the first 5 parameters as these are the only ones required to create a basic post. If you want to explore the other parameters further you can find more information HERE.\n\nSteps\n\n\n  App setup - Library install and import. Connection to Steem node\n  Variable input and format - Input and creation of varialbes\n  Post submission and result - Committing of transaction to the blockchain\n\n\n1. App setup \n\nIn this tutorial we use 4 packages:\n\n\n  random and string - used to create a random string used for the permlink\n  steem - steem-python library and interaction with Blockchain\n  steembase - used to connect to the testnet\n\n\nWe import the libraries, connect to the testnet and initialize the Steem class.\n\nimport random\nimport string\nimport steembase\nimport steem\n\nsteembase.chains.known_chains['STEEM'] = {\n    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',\n    'prefix': 'STX', 'steem_symbol': 'STEEM', 'sbd_symbol': 'SBD', 'vests_symbol': 'VESTS'\n}\n\n#connect node and private posting key\nclient = steem.Steem(nodes=['https://testnet.steem.vc'], keys=['5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz'])\n\n\n\nBecause this tutorial alters the blockchain we have to connect to the testnet. We also require the private posting key of the contributing author in order to commit the post which is why it is specified along with the testnet node. We have supplied a test account, cdemo to use with this tutorial.\n\n2. Variable input and format\n\nThe first three variables are captured via a simple string input while the tags variable is captured in the form of an array.\n\n#capture variables\nauthor = input('Username: ')\ntitle = input('Post Title: ')\nbody = input('Post Body: ')\n\n#capture list of tags and separate by \" \"\ntaglimit = 2 #number of tags 1 - 5\ntaglist = []\nfor i in range(1, taglimit+1):\n\tprint(i)\n\ttag = input(' Tag : ')\n\ttaglist.append(tag)\n\n\n\nThe tags parameter needs to be in the form of a single string with the words split by an empty space, so we add a line to prepare that variable. We also use a random generator to create a new permlink for the post being created\n\n\" \".join(taglist) #create string joined with empty spaces\n\n#random generator to create post permlink\npermlink = ''.join(random.choices(string.digits, k=10))\n\n\n\nThe random generator is limited to 10 characters in this case but the permlink can be up to 256 bytes. If the permlink value is left empty then it auto creates a permlink based on the title of the post. The permlink is unique to the author only which means that multiple authors can have the same title for the thier post.\n\n3. Post submission and result\n\nThe last step is to transmit the post through to the blockchain. This is done post method within the commit class. All the defined parameters are submitted with the function. As stated earlier in the tutorial, there are quite a few parameters for this function but for a basic post these 5 are the most important.\n\nclient.commit.post(title=title, body=body, author=author, tags=taglist, permlink=permlink)\n\nprint(\"Post created successfully\")\n\n\n\nA simple confirmation is printed on the screen if the post is committed successfully.\n\nYou can also check on the testportal for the post.\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/10_submit_post\n  pip install -r requirements.txt\n  python index.py\n  After a few moments, you should see a prompt for input in terminal screen."
						}
						
					
				
			
				
					
						,
						
						"tutorials-python-using-keys-securely": {
							"id": "tutorials-python-using-keys-securely",
							"title": "PY: Using Keys Securely",
							"category": "tutorials-python",
							"description": "In this tutorial we will learn how SteemPython library handles transaction signing with users key and how to securely manage your private keys",
		  				"type": "",
							"url": "/#tutorials-pythonusing_keys_securely",
							"content": "Full, runnable src of Using Keys Securely can be downloaded as part of the PY tutorials repository.\n\n\nIntro\n\nAll python tutorials will be in Python3 and developers following these tutorials should have sufficient knowlegde to use pip/pip3 package manager. Your development environment should be set up properly to test these tutorials.\n\nSteem python library has 2 ways to handle your keys. One is from source code, another one is through command line interface called steempy. steempy cli is installed by default when you install steem-python library on your machine.\n\nSteps\n\n\n  App setup - Library install and import\n  Key usage example - Example showing how to import keys\n\n\n1. App setup \n\nIn this tutorial we are only using steem package - steem-python library.\n\n  # initialize Steem class\n  from steem import Steem\n\n  # defining private keys inside source code is not secure way but possible\n  s = Steem(keys=['&lt;private_posting_key&gt;', '&lt;private_active_key&gt;'])\n\n\n\nLast line from above snippet shows how to define private keys for account that’s going to transact using script.\n\n2. Key usage example \n\nAfter defining private keys inside Steem class, we can quickly sign any transaction and broadcast it to the network.\n\n  # above will allow accessing Commit methods such as\n  # demo account sending 0.001 STEEM to demo1 account\n\n  s.commit.transfer('demo','0.001','STEEM','memo text','demo1')\n\n\n\nAbove method works but it is not secure way of handling your keys because you have entered your keys within source code that you might leak accidentally. To avoid that, we can use CLI - command line interface steempy.\n\nYou can type following to learn more about steempy commands:\n\n  steempy -h\n\n\n\nsteempy lets you leverage your BIP38 encrypted wallet to perform various actions on your accounts.\n\nThe first time you use steempy, you will be prompted to enter a password. This password will be used to encrypt the steempy wallet, which contains your private keys.\n\nYou can import your Steem username with following command:\n\nsteempy importaccount username\n\nNext you can import individual private keys:\n\nsteempy addkey &lt;private_key&gt;\n\nThat’s it, now that your keys are securely stored on your local machine, you can easily sign transaction from any of your Python scripts by using defined keys.\n\n  # if private keys are not defined\n  # accessing Wallet methods are also possible and secure way\n  s.wallet.get_active_key_for_account('demo')\n\n\n\nAbove line fetches private key for user demo from local machine and signs transaction.\n\nsteempy also allows you to sign and broadcast transactions from terminal. For example:\n\nsteempy transfer --account &lt;account_name&gt; &lt;recipient_name&gt; 1 STEEM memo\n\nwould sign and broadcast transfer operation,\n\nsteempy upvote --account &lt;account_name&gt; link\n\nwould sing and broadcast vote operation, etc.\n\nThat’s it!\n\nTo Run the tutorial\n\n\n  clone this repo\n  cd tutorials/12_using_keys_securely\n  pip install -r requirements.txt\n  python index.py\n  After a few moments, you should see output in terminal/command prompt screen."
						}
						
					
				
			
		
			
				
					
						,
						
						"tutorials-recipes-estimate-upvote": {
							"id": "tutorials-recipes-estimate-upvote",
							"title": "Estimate the value of an upvote",
							"category": "tutorials-recipes",
							"description": "Calculate the approximate value of an upvote on Steem",
		  				"type": "",
							"url": "/#tutorials-recipesestimate_upvote",
							"content": "By the end of this recipe you should know how to estimate value of each vote on Steem.\n\nThis recipe will take you through the process of fetching necessary data and formulating estimation.\n\nIntro\n\nCalculating value of each vote depends on multiple factors. Reward fund, recent claims, account’s total vests, rate of the sbd, voting power and weight of the vote. It is quite useful information for users to see and estimate. All of the data is possible to get via available APIs.\n\nSteps\n\n\n  Get Reward Fund Current reward fund information is crucial part of estimation\n  Get Account Steem power and voting power is another important info\n  Feed history To get price rate reported by witnesses\n  Final calculation Formulate all information we have\n\n\n1. Get Reward Fund\n\nGetting Reward Fund information is simply calling get_reward_fund('post') api call, it will give us reward_balance and recent_claims.\n\nThe response we’re working with will look like:\n\n{\n\t\"id\":0,\n\t\"name\":\"post\",\n\t\"reward_balance\":\"741222.051 STEEM\",\n\t\"recent_claims\":\"457419472820935017\",\n\t\"last_update\":\"2018-05-23T12:08:36\",\n\t\"content_constant\":\"2000000000000\",\n\t\"percent_curation_rewards\":2500,\n\t\"percent_content_rewards\":10000,\n\t\"author_reward_curve\":\"linear\",\n\t\"curation_reward_curve\":\"square_root\"\n}\n\n\n\n2. Get Account\n\nNext we will need total vests held by account, get_accounts api call returns account data, which will hold vesting_shares, received_vesting_shares, delegated_vesting_shares. It also returns current voting_power information.\n\nThe response example will look like:\n\n[\n  {\n    \"id\": 9660,\n    \"name\": \"steemitblog\",\n    \"owner\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [\n        [\n          \"ned\",\n          1\n        ]\n      ],\n      \"key_auths\": [\n        [\n          \"STM65wH1LZ7BfSHcK69SShnqCAH5xdoSZpGkUjmzHJ5GCuxEK9V5G\",\n          1\n        ]\n      ]\n    },\n    \"active\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [],\n      \"key_auths\": [\n        [\n          \"STM65wH1LZ7BfSHcK69SShnqCAH5xdoSZpGkUjmzHJ5GCuxEK9V5G\",\n          1\n        ]\n      ]\n    },\n    \"posting\": {\n      \"weight_threshold\": 1,\n      \"account_auths\": [\n        [\n          \"ned\",\n          1\n        ]\n      ],\n      \"key_auths\": [\n        [\n          \"STM4yfYEjUoey4PLrKhnKFo1XKQZtZ77fWLnbGTr2mAUaSt2Sx9W4\",\n          1\n        ],\n        [\n          \"STM5FeHFtL8J453DUi98LKwkqXBH5iwxf9xCqYs6QwPibPru3RNq3\",\n          1\n        ],\n        [\n          \"STM5VwLXkNQf17sQ2XuxScdxruwBy1jak2mDxCjmyfYMNhm1WzPzN\",\n          1\n        ],\n        [\n          \"STM5ke2kzgwBmysSqCNM6zRABi8SNpaJEtnFXuTtRcU3Uvf47481z\",\n          1\n        ]\n      ]\n    },\n    \"memo_key\": \"STM5FeHFtL8J453DUi98LKwkqXBH5iwxf9xCqYs6QwPibPru3RNq3\",\n    \"json_metadata\": \"\",\n    \"proxy\": \"\",\n    \"last_owner_update\": \"2017-03-17T18:19:18\",\n    \"last_account_update\": \"2017-03-17T18:19:18\",\n    \"created\": \"2016-05-24T18:54:24\",\n    \"mined\": false,\n    \"recovery_account\": \"steem\",\n    \"last_account_recovery\": \"2016-07-19T19:48:54\",\n    \"reset_account\": \"null\",\n    \"comment_count\": 0,\n    \"lifetime_vote_count\": 0,\n    \"post_count\": 154,\n    \"can_vote\": true,\n    \"voting_power\": 9800,\n    \"last_vote_time\": \"2018-05-22T20:10:45\",\n    \"balance\": \"810.371 STEEM\",\n    \"savings_balance\": \"0.000 STEEM\",\n    \"sbd_balance\": \"4613.426 SBD\",\n    \"sbd_seconds\": \"10828300402329\",\n    \"sbd_seconds_last_update\": \"2018-05-22T22:34:24\",\n    \"sbd_last_interest_payment\": \"2018-04-25T18:26:15\",\n    \"savings_sbd_balance\": \"0.000 SBD\",\n    \"savings_sbd_seconds\": \"0\",\n    \"savings_sbd_seconds_last_update\": \"1970-01-01T00:00:00\",\n    \"savings_sbd_last_interest_payment\": \"1970-01-01T00:00:00\",\n    \"savings_withdraw_requests\": 0,\n    \"reward_sbd_balance\": \"79.490 SBD\",\n    \"reward_steem_balance\": \"0.000 STEEM\",\n    \"reward_vesting_balance\": \"608341.169185 VESTS\",\n    \"reward_vesting_steem\": \"293.101 STEEM\",\n    \"vesting_shares\": \"93540695.469156 VESTS\",\n    \"delegated_vesting_shares\": \"0.000000 VESTS\",\n    \"received_vesting_shares\": \"0.000000 VESTS\",\n    \"vesting_withdraw_rate\": \"0.000000 VESTS\",\n    \"next_vesting_withdrawal\": \"1969-12-31T23:59:59\",\n    \"withdrawn\": 0,\n    \"to_withdraw\": 0,\n    \"withdraw_routes\": 0,\n    \"curation_rewards\": 10288,\n    \"posting_rewards\": 38917298,\n    \"proxied_vsf_votes\": [\n      0,\n      0,\n      0,\n      0\n    ],\n    \"witnesses_voted_for\": 0,\n    \"last_post\": \"2018-05-22T18:59:33\",\n    \"last_root_post\": \"2018-05-22T18:59:33\",\n    \"average_bandwidth\": \"34722906781\",\n    \"lifetime_bandwidth\": \"656153000000\",\n    \"last_bandwidth_update\": \"2018-05-22T20:10:45\",\n    \"average_market_bandwidth\": 1170000000,\n    \"lifetime_market_bandwidth\": 1170000000,\n    \"last_market_bandwidth_update\": \"2016-07-27T15:10:09\",\n    \"vesting_balance\": \"0.000 STEEM\",\n    \"reputation\": \"146151592482665\",\n    \"transfer_history\": [],\n    \"market_history\": [],\n    \"post_history\": [],\n    \"vote_history\": [],\n    \"other_history\": [],\n    \"witness_votes\": [],\n    \"tags_usage\": [],\n    \"guest_bloggers\": []\n  }\n]\n\n\n\n3. Feed history\n\nLast thing we will need is rate of the get_current_median_history_price, returns median price rate bucket with base element.\n\nThe response example will look like:\n\n{\n  \"base\": \"3.029 SBD\",\n  \"quote\": \"1.000 STEEM\"\n}\n\n\n\n4. Final calculation\n\nAfter getting all these variables, all we have to do is to calculate estimation\n\ntotal_vests = vesting_shares + received_vesting_shares - delegated_vesting_shares\nfinal_vest = total_vests * 1e6\npower = (voting_power * weight / 10000) / 50\nrshares = power * final_vest / 10000\nestimate = rshares / recent_claims * reward_balance * sbd_median_price\n\n\n\nThat’s all there is to it."
						}
						
					
				
			
				
					
						,
						
						"tutorials-recipes-forum-market-bandwidth": {
							"id": "tutorials-recipes-forum-market-bandwidth",
							"title": "Forum/Market Bandwidth",
							"category": "tutorials-recipes",
							"description": "How to interpret raw bandwidth data.",
		  				"type": "",
							"url": "/#tutorials-recipesforum-market-bandwidth",
							"content": "Intro\n\nWe’re going over the various API calls needed to determine the remaining bandwidth available to a particular account.  As mentioned in the STEEM Whitepaper:\n\n\n  Bandwidth used by an individual user should be measured over a suitably long period of time to allow that\nuser to time-shift their usage. Users tend to login, do many things at once, then logout. This means that\ntheir bandwidth over a short period of time may appear much higher than if viewed over a longer period of\ntime. If the time window is stretched too far, then the reserve ratio will not adjust fast enough to respond\nto short-term surges; conversely, if the window is too short then clustering usage will have too big of an\nimpact on normal users.\n\n\nBandwidth is specific to each account and depends on account activity.\n\nSections\n\n\n  Getting Account Bandwidth\n  Dynamic Global Properties\n  Account STEEM Power\n  Calculate\n\n\nGetting Account Bandwidth\n\ncurl -s --data '{\n   \"jsonrpc\":\"2.0\",\n   \"method\":\"condenser_api.get_account_bandwidth\",\n   \"params\":[\n      \"cheetah\",\n      \"forum\"\n   ],\n   \"id\":1\n}' https://api.steemit.com\n\n\n\n{\n   \"jsonrpc\":\"2.0\",\n   \"result\":{\n      \"id\":20846,\n      \"account\":\"cheetah\",\n      \"type\":\"forum\",\n      \"average_bandwidth\":\"7525646416619\",\n      \"lifetime_bandwidth\":\"386010589000000\",\n      \"last_bandwidth_update\":\"2018-07-18T16:37:54\"\n   },\n   \"id\":1\n}\n\n\n\nIn this example, we got forum (blogging) average bandwidth of 7,525,646,416,619 with a lifetime bandwidth of 386,010,589,000,000.\n\nNote, average_bandwidth is expressed as an integer with six decimal places represented.  Divide by 1,000,000 in order to get the actual bytes of bandwidth, in this case: 7,525,646 bytes.\n\nDynamic Global Properties\n\nTo do the calculation, we need max_virtual_bandwidth and total_vesting_shares from the global properties, e.g.:\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_dynamic_global_properties\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\n{\n   \"id\":1,\n   \"jsonrpc\":\"2.0\",\n   \"result\":{\n      \"head_block_number\":24264289,\n      \"head_block_id\":\"01723e6156ad44ac7bf3028a53a7ac642084cb39\",\n      \"time\":\"2018-07-17T20:25:27\",\n      \"current_witness\":\"followbtcnews\",\n      \"total_pow\":514415,\n      \"num_pow_witnesses\":172,\n      \"virtual_supply\":\"283443693.176 STEEM\",\n      \"current_supply\":\"271786073.683 STEEM\",\n      \"confidential_supply\":\"0.000 STEEM\",\n      \"current_sbd_supply\":\"15504633.926 SBD\",\n      \"confidential_sbd_supply\":\"0.000 SBD\",\n      \"total_vesting_fund_steem\":\"193007548.472 STEEM\",\n      \"total_vesting_shares\":\"391468555319.000697 VESTS\",\n      \"total_reward_fund_steem\":\"0.000 STEEM\",\n      \"total_reward_shares2\":\"0\",\n      \"pending_rewarded_vesting_shares\":\"382967391.274340 VESTS\",\n      \"pending_rewarded_vesting_steem\":\"187173.234 STEEM\",\n      \"sbd_interest_rate\":0,\n      \"sbd_print_rate\":2966,\n      \"maximum_block_size\":65536,\n      \"current_aslot\":24341309,\n      \"recent_slots_filled\":\"340282366920938463463374607431768211455\",\n      \"participation_count\":128,\n      \"last_irreversible_block_num\":24264271,\n      \"vote_power_reserve_rate\":10,\n      \"average_block_size\":13436,\n      \"current_reserve_ratio\":200000000,\n      \"max_virtual_bandwidth\":\"264241152000000000000\"\n   }\n}\n\n\n\nAccount STEEM Power\n\nWe also need to know how much the account has in STEEM Power from vesting_shares and received_vesting_shares:\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_accounts\", \"params\":[[\"cheetah\"]], \"id\":1}' https://api.steemit.com\n\n\n\n{\n   \"jsonrpc\":\"2.0\",\n   \"result\":[\n      {\n         \"id\":25796,\n         \"name\":\"cheetah\",\n         \"owner\":{\n            \"weight_threshold\":1,\n            \"account_auths\":[],\n            \"key_auths\":[[\"STM7yFmwPSKUP7FCV7Ut9Aev5cwfDzJZixcreS1U3ha36XG47ZpqT\", 1]]\n         },\n         \"active\":{\n            \"weight_threshold\":1,\n            \"account_auths\":[],\n            \"key_auths\":[[\"STM7yFmwPSKUP7FCV7Ut9Aev5cwfDzJZixcreS1U3ha36XG47ZpqT\", 1]]\n         },\n         \"posting\":{\n            \"weight_threshold\":1,\n            \"account_auths\":[[\"anyx\", 100]],\n            \"key_auths\":[[\"STM5bicRFWhpxnwBymo2HHJv6mFLiaP6AwVVsFEnnVjVcqbvqzvFt\", 100], [\"STM7yFmwPSKUP7FCV7Ut9Aev5cwfDzJZixcreS1U3ha36XG47ZpqT\", 100], [\"STM8Jn23vNmBzVuDAgQeZzzR17LmruENmmZmv1ra53tbsBgYbJFwk\", 100]]\n         },\n         \"memo_key\":\"STM7yFmwPSKUP7FCV7Ut9Aev5cwfDzJZixcreS1U3ha36XG47ZpqT\",\n         \"json_metadata\":\"{\\\"profile\\\":{\\\"profile_image\\\":\\\"https:\\/\\/c1.staticflickr.com\\/6\\/5739\\/22389343016_25d10c52a3_b.jpg\\\",\\\"about\\\":\\\"I am a robot that automatically finds similar content. Check the website linked to on my blog to learn more about me!\\\",\\\"website\\\":\\\"http:\\/\\/steemit.com\\/steemit\\/@cheetah\\/faq-about-cheetah\\\"}}\",\n         \"proxy\":\"\",\n         \"last_owner_update\":\"1970-01-01T00:00:00\",\n         \"last_account_update\":\"2017-06-13T00:14:00\",\n         \"created\":\"2016-07-17T08:47:18\",\n         \"mined\":true,\n         \"recovery_account\":\"steem\",\n         \"last_account_recovery\":\"1970-01-01T00:00:00\",\n         \"reset_account\":\"null\",\n         \"comment_count\":0,\n         \"lifetime_vote_count\":0,\n         \"post_count\":517808,\n         \"can_vote\":true,\n         \"voting_power\":1249,\n         \"last_vote_time\":\"2018-07-18T16:39:21\",\n         \"balance\":\"118.463 STEEM\",\n         \"savings_balance\":\"0.000 STEEM\",\n         \"sbd_balance\":\"67.717 SBD\",\n         \"sbd_seconds\":\"127094582318\",\n         \"sbd_seconds_last_update\":\"2018-07-18T14:13:15\",\n         \"sbd_last_interest_payment\":\"2018-06-20T12:01:15\",\n         \"savings_sbd_balance\":\"0.000 SBD\",\n         \"savings_sbd_seconds\":\"0\",\n         \"savings_sbd_seconds_last_update\":\"1970-01-01T00:00:00\",\n         \"savings_sbd_last_interest_payment\":\"1970-01-01T00:00:00\",\n         \"savings_withdraw_requests\":0,\n         \"reward_sbd_balance\":\"0.005 SBD\",\n         \"reward_steem_balance\":\"0.009 STEEM\",\n         \"reward_vesting_balance\":\"26.366463 VESTS\",\n         \"reward_vesting_steem\":\"0.013 STEEM\",\n         \"vesting_shares\":\"4770940.577823 VESTS\",\n         \"delegated_vesting_shares\":\"0.000000 VESTS\",\n         \"received_vesting_shares\":\"16020356.484882 VESTS\",\n         \"vesting_withdraw_rate\":\"347124.891306 VESTS\",\n         \"next_vesting_withdrawal\":\"2018-07-21T02:27:09\",\n         \"withdrawn\":\"1388499565224\",\n         \"to_withdraw\":\"4512623586985\",\n         \"withdraw_routes\":1,\n         \"curation_rewards\":170083,\n         \"posting_rewards\":37433355,\n         \"proxied_vsf_votes\":[\"50341599736964\", \"20169963876698\", 0, 0],\n         \"witnesses_voted_for\":23,\n         \"last_post\":\"2018-07-18T16:39:24\",\n         \"last_root_post\":\"2018-07-18T07:00:45\",\n         \"average_bandwidth\":\"7525467544963\",\n         \"lifetime_bandwidth\":\"386011530000000\",\n         \"last_bandwidth_update\":\"2018-07-18T16:39:24\",\n         \"average_market_bandwidth\":2406616155,\n         \"lifetime_market_bandwidth\":\"224370000000\",\n         \"last_market_bandwidth_update\":\"2018-07-12T04:57:36\",\n         \"vesting_balance\":\"0.000 STEEM\",\n         \"reputation\":\"305786119478594\",\n         \"transfer_history\":[],\n         \"market_history\":[],\n         \"post_history\":[],\n         \"vote_history\":[],\n         \"other_history\":[],\n         \"witness_votes\":[\n            \"anyx\",\n            \"arcange\",\n            \"ats-witness\",\n            \"ausbitbank\",\n            \"bitcoiner\",\n            \"blockchained\",\n            \"chitty\",\n            \"drakos\",\n            \"followbtcnews\",\n            \"fubar-bdhr\",\n            \"guiltyparties\",\n            \"liondani\",\n            \"lukestokes.mhth\",\n            \"neoxian\",\n            \"netuoso\",\n            \"noisy.witness\",\n            \"patrice\",\n            \"pfunk\",\n            \"pjau\",\n            \"teamsteem\",\n            \"thecryptodrive\",\n            \"themarkymark\",\n            \"timcliff\"\n         ],\n         \"tags_usage\":[],\n         \"guest_bloggers\":[]\n      }\n   ],\n   \"id\":1\n}\n\n\n\nCalculate\n\nNow, we can derive bandwidth_allocated:\n\nbandwidth_allocated = max_virtual_bandwidth * (vesting_shares + received_vesting_shares) / total_vesting_shares\n\nbandwidth_allocated = bandwidth_allocated / 1000000\n\nIn our example, bandwidth_allocated = 14034118993.\n\nNow that we have both bandwidth_allocated and average_bandwidth, we can determine the percentages.\n\nFirst, we need average_bandwidth on the same scale as bandwidth_allocated:\n\naverage_bandwidth = average_bandwidth / 1000000\n\nThen we can get the percentages:\n\nbandwidth_used = 100 * average_bandwidth / bandwidth_allocated\n\nbandwidth_remaining = 100 - (100 * average_bandwidth / bandwidth_allocated)\n\nWe can see that cheetah has used 0.053 % bandwidth and has 99.946 % remaining as of last_bandwidth_update."
						}
						
					
				
			
				
					
						,
						
						"tutorials-recipes-jussi-multiplexer": {
							"id": "tutorials-recipes-jussi-multiplexer",
							"title": "Using jussi as a Multiplexer",
							"category": "tutorials-recipes",
							"description": "Optimize your local applications with jussi",
		  				"type": "",
							"url": "/#tutorials-recipesjussi-multiplexer",
							"content": "By the end of this recipe you should know how to install jussi on your local subnet to take advantage of its features.\n\nThis recipe will take you through the process of setting up jussi for a small infrastructure like a home network.\n\nIntro\n\nWhat is a Multiplexer?  In this context, a multiplexer an appliance that accepts API requests from multiple applications running on the same subnet and passes them to an upstream node.  This means, for example, if you have two applications that request the same block from API, your local jussi instance will make a single upstream request for the block and return it to both applications.\n\nDeploying jussi on your own local subnet will help improve efficiency because your local applications won’t require SSL and jussi can take care of gzipping requests that go out over the Internet.\n\n\n  \n\n\nSteps\n\n\n  Setting Up Docker In order to run jussi, docker is recommended\n  Install jussi Clone jussi from the repository and build\n  Configure Your Apps Point all of your applications to this node\n\n\n1. Setting Up Docker \n\nAlthough it’s possible to set up jussi to run natively without virtualization, docker is recommended.  Setting up docker depends on your operating system:\n\n\n  Docker for Linux\n  Docker for macOS\n  Docker for Windows\n\n\n2. Install jussi \n\ngit clone https://github.com/steemit/jussi.git\ncd jussi\n\n\n\nEdit the file DEV_config.json and change all:\n\nhttps://steemd.steemitdev.com\n\n… to …\n\nhttps://api.steemit.com\n\nThen build and run:\n\ndocker build -t=\"$USER/jussi:$(git rev-parse --abbrev-ref HEAD)\" .\ndocker run -itp 9000:8080 \"$USER/jussi:$(git rev-parse --abbrev-ref HEAD)\"\n\n\n\n3. Configure Your Apps \n\nNow, you can use your new jussi node as if it’s a full node running locally.  For example:\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_block\", \"params\":[8675309], \"id\":1}' http://localhost:9000\n\n\n\nIn this case, http://localhost:9000 will act like a full node.  In reality, it’s passing all of its request to its upstream, https://api.steemit.com.\n\nOnce you’ve implemented your own jussi node in this manner, you should notice an improvement in bandwidth utilization.  If you’re internet provider implements packet shaping strategies, this will have a positive impact because you are no longer streaming the entire blockchain once for each application.\n\nTroubleshooting / Updating\n\nError: invalid argument \"/jussi:master\" for t=/jussi:master: invalid reference format\n\nSolution:\n\nYou’re probably trying to run on a raspberry pi.  Just replace $USER in the command with the current user.\n\n\n\nIf you would like to update jussi to the latest version, here’s a quick way:\n\ngit stash &amp;&amp; git pull &amp;&amp; git stash pop\n\n\n\nIf there are git errors due to structural changes to DEV_config.json, just start over from step 2 and reclone jussi to a fresh location.  Otherwise, you should be able to rebuild and run."
						}
						
					
				
			
				
					
						,
						
						"tutorials-recipes-understanding-dynamic-global-properties": {
							"id": "tutorials-recipes-understanding-dynamic-global-properties",
							"title": "Understanding Dynamic Global Properties",
							"category": "tutorials-recipes",
							"description": "Maintains global state information",
		  				"type": "",
							"url": "/#tutorials-recipesunderstanding-dynamic-global-properties",
							"content": "Intro\n\nDynamic Global Properties represents a set of values that are calculated during normal chain operations and reflect the current values of global blockchain properties.\n\nThe API returns an object containing information that changes every block interval such as the head block number, the total vesting fund, etc.\n\nSections\n\n\n  Fields\n    \n      head_block_number\n      head_block_id\n      time\n      current_witness\n      total_pow\n      num_pow_witnesses\n      virtual_supply\n      current_supply\n      confidential_supply\n      current_sbd_supply\n      confidential_sbd_supply\n      total_vesting_fund_steem\n      total_vesting_shares\n      total_reward_fund_steem\n      total_reward_shares2\n      sbd_interest_rate\n      maximum_block_size\n      current_aslot\n      recent_slots_filled\n      last_irreversible_block_num\n      vote_power_reserve_rate\n      average_block_size\n      current_reserve_ratio\n      max_virtual_bandwidth\n    \n  \n  Not Covered\n  Example Method Call\n  Example Output\n\n\nhead_block_number\n\nBlock height at the head of the blockchain.  This represents the latest block produced by witnesses.\n\n\n  example: 24155032\n\n\nhead_block_id\n\nUsed to implement TaPoS (Transaction as Proof of Stake).  The first 4 bytes (8 hex digits) of the block ID represents the block number.  E.g., 01709398 in hex is 24155032 in decimal.\n\n\n  example: 0170939865fa4e3aa7fca8f8df35d23333fe0bee\n  see: RIPEMD-160 hashes\n\n\ntime\n\nPoint in time (UTC) that the block was included in the chain.\n\nUsed to synchronize events like Hard Fork activation.\n\nWhen attempting to calculate the validity of a transaction we need to lookup a past block and check its block hash and the time it occurred so we can calculate whether the current transaction is valid and at what time it should expire.\n\nFor new transactions, expirations originate from this time.\n\n\n  example: 2018-07-14T01:19:51\n\n\ncurrent_witness\n\nAccount name of the current witness.\n\n\n  example: blocktrades\n\n\ntotal_pow\n\n\nDeprecated\n\n\nThe total POW accumulated, aka the sum of num_pow_witness at the time new POW is added.\n\n\n  example: 514415\n\n\nnum_pow_witnesses\n\n\nDeprecated\n\n\nThe current count of how many pending POW witnesses there are, determines the difficulty of doing pow.\n\n\n  example: 172\n\n\nvirtual_supply\n\nThe virtual supply is the supply of all STEEM + all SBD if all SBD were converted to STEEM at the current median price.\n\n\n  example: 283290592.652 STEEM\n\n\ncurrent_supply\n\nSTEEM currently in existence.\n\n\n  example: 271546371.129 STEEM\n\n\nconfidential_supply\n\nTotal asset held in confidential balances.\n\n\n  example: 0.000 STEEM\n\n\ncurrent_sbd_supply\n\nSBD currently in existence.\n\n\n  example: 15478883.968 SBD\n\n\nconfidential_sbd_supply\n\nTotal asset held in confidential balances.\n\n\n  example: 0.000 SBD\n\n\ntotal_vesting_fund_steem\n\nSTEEM that is invested in STEEM POWER (powered up).\n\n\n  example: 192713261.007 STEEM\n\n\ntotal_vesting_shares\n\nVESTS that are invested in STEEM POWER (powered up).\n\n\n  example: 390950506702.452773 VESTS\n\n\ntotal_reward_fund_steem\n\nSTEEM available in the reward pool.\n\n\n  example: 0.000 STEEM\n\n\ntotal_reward_shares2\n\nNumber of shares in the pool.\n\n\n  example: 0\n\n\nsbd_interest_rate\n\nThis property defines the interest rate that SBD deposits receive.\n\n\n  example: 0\n\n\nmaximum_block_size\n\nMaximum block size is decided by the set of active witnesses which change every round.  Each witness posts what they think the maximum size should be as part of their witness properties, the median size is chosen to be the maximum block size for the round.\n\nNote: the minimum value for maximum_block_size is defined by the protocol to prevent the network from getting stuck by witnesses attempting to set this too low.\n\n\n  example: 65536\n\n\ncurrent_aslot\n\nThe current absolute slot number.  Equal to the total number of slots since genesis.  Also equal to the total number of missed slots plus head_block_number.\n\n\n  example: 24231997\n\n\nrecent_slots_filled\n\nUsed to compute witness participation.\n\n\n  example: 340282366920938463463374607431768211455\n\n\nlast_irreversible_block_num\n\nThe latest block number that has been confirmed by two thirds of all block producers and is thus irreversible.\n\n\n  example: 24155017\n\n\nvote_power_reserve_rate\n\nThe number of votes regenerated per day.  Any user voting slower than this rate will be “wasting” voting power through spillover; any user voting faster than this rate will have their votes reduced.\n\n\n  example: 10\n\n\naverage_block_size\n\nAverage block size is updated every block to be: average_block_size = (99 * average_block_size + new_block_size) / 100.  This property is used to update the current_reserve_ratio to maintain approximately *  50% or less utilization of network capacity.\n\n\n  example: 9309\n\n\ncurrent_reserve_ratio\n\nAny time average_block_size &lt;= 50% maximum_block_size this value grows by 1 until it reaches STEEM_MAX_RESERVE_RATIO.  Any time average_block_size is greater than 50% it falls by 1%.  Upward adjustments happen once per round, downward adjustments happen every block.\n\n\n  example: 200000000\n\n\nmax_virtual_bandwidth\n\nThe maximum bandwidth the blockchain can support is max_bandwidth = maximum_block_size * STEEM_BANDWIDTH_AVERAGE_WINDOW_SECONDS / STEEM_BLOCK_INTERVAL; The maximum virtual bandwidth is: max_bandwidth * current_reserve_ratio\n\n\n  example: 264241152000000000000\n\n\nNot Covered\n\nFields not covered in this recipe are:\n\n\n  pending_rewarded_vesting_shares\n  pending_rewarded_vesting_steem\n  sbd_print_rate\n  participation_count\n\n\nExample Method Call\n\nTo retrieve the current results for condenser_api.get_dynamic_global_properties, we can retrieve the current state information using curl:\n\ncurl -s --data '{\"jsonrpc\":\"2.0\", \"method\":\"condenser_api.get_dynamic_global_properties\", \"params\":[], \"id\":1}' https://api.steemit.com\n\n\n\nExample Output\n\n{\n   \"id\":1,\n   \"jsonrpc\":\"2.0\",\n   \"result\":{\n      \"head_block_number\":24238248,\n      \"head_block_id\":\"0171d8a833dc369abd034b0c67d8725f96df9e5b\",\n      \"time\":\"2018-07-16T22:41:24\",\n      \"current_witness\":\"xeldal\",\n      \"total_pow\":514415,\n      \"num_pow_witnesses\":172,\n      \"virtual_supply\":\"283434761.199 STEEM\",\n      \"current_supply\":\"271729171.190 STEEM\",\n      \"confidential_supply\":\"0.000 STEEM\",\n      \"current_sbd_supply\":\"15498201.173 SBD\",\n      \"confidential_sbd_supply\":\"0.000 SBD\",\n      \"total_vesting_fund_steem\":\"192913644.627 STEEM\",\n      \"total_vesting_shares\":\"391296886352.617261 VESTS\",\n      \"total_reward_fund_steem\":\"0.000 STEEM\",\n      \"total_reward_shares2\":\"0\",\n      \"pending_rewarded_vesting_shares\":\"379159224.860656 VESTS\",\n      \"pending_rewarded_vesting_steem\":\"185294.019 STEEM\",\n      \"sbd_interest_rate\":0,\n      \"sbd_print_rate\":2933,\n      \"maximum_block_size\":65536,\n      \"current_aslot\":24315228,\n      \"recent_slots_filled\":\"340282366920938463463374607431768211400\",\n      \"participation_count\":128,\n      \"last_irreversible_block_num\":24238230,\n      \"vote_power_reserve_rate\":10,\n      \"average_block_size\":10950,\n      \"current_reserve_ratio\":200000000,\n      \"max_virtual_bandwidth\":\"264241152000000000000\"\n   }\n}"
						}
						
					
				
			
		
			
				
					
						,
						
						"tutorials-ruby-blog-feed": {
							"id": "tutorials-ruby-blog-feed",
							"title": "RB: Blog Feed",
							"category": "tutorials-ruby",
							"description": "This example will output blog details to the terminal for the author specified limited to five results",
		  				"type": "",
							"url": "/#tutorials-rubyblog_feed",
							"content": "Full, runnable src of Blog Feed can be downloaded as part of the RB tutorials repository.\n\n\nScript\n\nThe script parses the creation date, assuming Zulu timezone (AKA UTC).\n\nThe output will be the latest five posts/reblogs for the account specified.  If the author is the same as the account specified, it is assumed to be a post by this account.  Otherwise, it is assumed to be a reblog.\n\nIt also counts the words in the content body by splitting the text into an array of strings, delimited by whitespace.\n\nFinally, it creates the canonical URL by combining parent_permlink, author, and permlink.\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/01_blog_feed\nbundle install\nruby blog_feed.rb steemitblog\n\n\n\nExample Output\n\n2018-03-24 17:30:36 UTC\n  Post: Happy 2nd Birthday Steem Blockchain\n  By: steemitblog\n  Words: 301\n  https://steemit.com/steem/@steemitblog/happy-2nd-birthday-steem-blockchain\n2018-03-07 20:56:36 UTC\n  Post: Join Team Steemit at TokenFest!\n  By: steemitblog\n  Words: 104\n  https://steemit.com/steemit/@steemitblog/join-team-steemit-at-tokenfest\n2018-02-27 20:18:36 UTC\n  Post: Smart Media Token Development\n  By: steemitblog\n  Words: 699\n  https://steemit.com/smt/@steemitblog/smart-media-token-development\n2018-02-25 20:55:24 UTC\n  Reblog: I filmed this video of @ned @pkattera and @sneak talking about the SMTs and the future of Steemit\n  By: ruwan\n  Words: 89\n  https://steemit.com/steemit/@ruwan/i-filmed-this-video-of-ned-pkattera-and-sneak-talking-about-the-smts-and-the-future-of-steemit\n2018-02-22 17:41:00 UTC\n  Post: STEEM 및 SBD가 GOPAX에 상장되었습니다\n  By: steemitblog\n  Words: 317\n  https://steemit.com/gopax/@steemitblog/steem-sbd-gopa"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-edit-content-patching": {
							"id": "tutorials-ruby-edit-content-patching",
							"title": "RB: Edit Content Patching",
							"category": "tutorials-ruby",
							"description": "",
		  				"type": "",
							"url": "/#tutorials-rubyedit_content_patching",
							"content": "Full, runnable src of Edit Content Patching can be downloaded as part of the RB tutorials repository.\n\n\ntitle: How to edit a Post\nposition: 5\nexclude: true\nlayout: main-script\ndescription: Patching changes to a post on Steem.\nmain_script: tutorials-ruby/edit_content_patching.rb\nmain_type: ruby\nmain_script_anchor: Script\n—\n\nIntro\n\nThis tutorial will show a technique for efficiently editing a post by only broadcasting changes to the post body.\n\nScript\n\nThis script will take an existing post and append a new line by broadcasting a comment operation containing a diff instruction.  This instruction will tell the blockchain to append new content to the end of the body of the original comment.\n\nBecause this is a live example, we set broadcast to false so that it only runs if you modify the example and set broadcast to true.\n\nAs stated earlier, you will need to change broadcast to true.  You can also set other values to test this script on other post:\n\n\n  wif - The posting key of the author.\n  author - Name of the account that wrote the post we’re modifying.\n  title - Title of the post.\n  permlink - Leave this if the permlink is derived from the title or set it to the original permlink if you want to modify the title independently from the permlink.\n\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/12_edit_content_patching\nbundle install\nruby edit_content_patching.rb\n\n\n\nExample Output\n\nChanges:\n@@ -26,8 +26,26 @@\n  edited)\n+%0AAppended content.\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"id\": \"f327acc1c51d907a9ba9bfac70e6fc9e99ab2865\",\n    \"block_num\": 23035803,\n    \"trx_num\": 0,\n    \"expired\": false\n  },\n  \"id\": 1\n}"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-get-account-comments": {
							"id": "tutorials-ruby-get-account-comments",
							"title": "RB: Get Account Comments",
							"category": "tutorials-ruby",
							"description": "Fetching the comments written by a particular account",
		  				"type": "",
							"url": "/#tutorials-rubyget_account_comments",
							"content": "Full, runnable src of Get Account Comments can be downloaded as part of the RB tutorials repository.\n\n\nHistorically, applications that wanted to retrieve comments written by a particular account would use get_state.  But this method has been scheduled for deprecation.  So we’ll use a more supported approach in this tutorial using get_account_history.\n\nSections\n\n\n  Making the api call - Requesting account history\n    \n      Example api call - make the call in code\n      Example api call using script - using our tutorial script\n      Example Output - output from a successful call\n    \n  \n  Comment Fields - Getting more detail than provided by account history.\n  To Run - Running the example.\n\n\nMaking the api call\n\nTo request the latest comments by a particular author, we can use the get_account_history method:\n\napi = Radiator::Api.new\n\napi.get_account_history(account_name, -1, 10000) do |history|\n  history.each do |index, item|\n    type, op = item.op\n    \n    next unless type == 'comment'\n    next if op.parent_author.empty? # skip posts\n    next if op.parent_author == account_name # skip replies to account\n\n    # .\n    # ... your code here\n    # .\n  end\nend\n\n\n\nNotice, the above example request up to 10,000 operations from history, starting from the oldest.  From these results, we iterate on each item in history to locate a) type of comment, and b) parent_author that do not match the account_name.\n\nExample api call\n\nIf we want to get the comments by user @lordvader …\n\napi.get_account_history(\"lordvader\") do |content| ...\n\n\n\nExample api call using script\n\nAnd to do the same with our tutorial script\nruby get_account_comments.rb lordvader\n\n\n\nExample Output\n\nFrom the example we get the following output from our script:\n\n.\n.\n.\nReply to @saarliconvalley in discussion: \"The Empire has sent you a friend request.\"\n\tbody_length: 33 (7 words)\n\treplied at: 2018-03-27T16:02:45\n\tnet_votes: 0\n\thttps://steemit.com/@lordvader/re-saarliconvalley-re-lordvader-2018327t16025594z-20180327t160243538z\nReply to @teenovision in discussion: \"The Empire has sent you a friend request.\"\n\tbody_length: 90 (16 words)\n\treplied at: 2018-03-27T15:53:39, updated at: 2018-03-30T17:25:18, active at: 2018-03-30T17:25:18\n\tnet_votes: 0\n\thttps://steemit.com/@lordvader/re-teenovision-re-lordvader-the-empire-has-sent-you-a-friend-request-20180327t155339532z\nReply to @gtg in discussion: \"gtg witness log\"\n\tbody_length: 130 (25 words)\n\treplied at: 2018-04-06T04:29:00\n\tnet_votes: 2\n\thttps://steemit.com/@lordvader/re-gtg-ffdhu-gtg-witness-log-20180406t042906872z\n\n\n\nComment fields\n\nComments in the results of get_account_history will only return the following fields:\n\n\n  parent_author\n  parent_permlink\n  author\n  permlink\n  title\n  body\n  json_metadata\n\n\nIn our example script, we want more detail than this, so for every comment, we call get_content to retrieve more detail.  For a full explanation of the results provided by get_content, please refer to the tutorial: Get Post Details\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\n\n  &lt;account-name&gt;\n\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/09_get_account_comments\nbundle install\nruby get_account_comments.rb &lt;account-name&gt;"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-get-account-replies": {
							"id": "tutorials-ruby-get-account-replies",
							"title": "RB: Get Account Replies",
							"category": "tutorials-ruby",
							"description": "Fetching the replies written to a particular account",
		  				"type": "",
							"url": "/#tutorials-rubyget_account_replies",
							"content": "Full, runnable src of Get Account Replies can be downloaded as part of the RB tutorials repository.\n\n\nHistorically, applications that wanted to retrieve replies written to a particular account would use get_state.  But this method has been scheduled for deprecation.  So we’ll use a more supported approach in this tutorial using get_account_history.\n\nSections\n\n\n  Making the api call - Requesting account history\n    \n      Example api call - make the call in code\n      Example api call using script - using our tutorial script\n      Example Output - output from a successful call\n    \n  \n  Comment Fields - Getting more detail than provided by account history.\n  To Run - Running the example.\n\n\nMaking the api call\n\nTo request the latest replies to a particular author, we can use the get_account_history method:\n\napi = Radiator::Api.new\n\napi.get_account_history(account_name, -1, 10000) do |history|\n  history.each do |index, item|\n    type, op = item.op\n    \n    next unless type == 'comment'\n    next if op.parent_author.empty? # skip posts\n    next unless op.parent_author == account_name # skip comments by account\n\n    # .\n    # ... your code here\n    # .\n  end\nend\n\n\n\nNotice, the above example request up to 10,000 operations from history, starting from the oldest.  From these results, we iterate on each item in history to locate a) type of comment, and b) parent_author that match the account_name.\n\nExample api call\n\nIf we want to get the replies to user @lordvader …\n\napi.get_account_history(\"lordvader\") do |content| ...\n\n\n\nExample api call using script\n\nAnd to do the same with our tutorial script\nruby get_account_replies.rb lordvader\n\n\n\nExample Output\n\nFrom the example we get the following output from our script:\n\n.\n.\n.\nReply by @steemitboard in discussion: \"The Empire has sent you a friend request.\"\n\tbody_length: 677 (99 words)\n\treplied at: 2018-04-28T04:32:42\n\tnet_votes: 0\n\thttps://steemit.com/@steemitboard/steemitboard-notify-lordvader-20180428t043241000z\nReply by @jedimasteryoda in discussion: \"The Empire has sent you a friend request.\"\n\tbody_length: 65 (11 words)\n\treplied at: 2018-06-07T18:47:54\n\tnet_votes: 0\n\thttps://steemit.com/@jedimasteryoda/re-lordvader-the-empire-has-sent-you-a-friend-request-20180607t184754944z\nReply by @koinbot in discussion: \"The Empire has sent you a friend request.\"\n\tbody_length: 15 (2 words)\n\treplied at: 2018-06-23T07:58:51\n\tnet_votes: 0\n\thttps://steemit.com/@koinbot/re-lordvader-the-empire-has-sent-you-a-friend-request-20180623t075851464z\n\n\n\nComment fields\n\nReplies in the results of get_account_history will only return the following fields:\n\n\n  parent_author\n  parent_permlink\n  author\n  permlink\n  title\n  body\n  json_metadata\n\n\nIn our example script, we want more detail than this, so for every comment, we call get_content to retrieve more detail.  For a full explanation of the results provided by get_content, please refer to the tutorial: Get Post Details\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\n\n  &lt;account-name&gt;\n\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/08_get_account_replies\nbundle install\nruby get_account_replies.rb &lt;account-name&gt;"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-get-post-comments": {
							"id": "tutorials-ruby-get-post-comments",
							"title": "RB: Get Post Comments",
							"category": "tutorials-ruby",
							"description": "This example will output the reply details and totals for the postcomment passed as an argument to the script",
		  				"type": "",
							"url": "/#tutorials-rubyget_post_comments",
							"content": "Full, runnable src of Get Post Comments can be downloaded as part of the RB tutorials repository.\n\n\nScript\n\nFirst, we ask the blockchain for the replies on a post or comment.  Then, we grab the authors of those replies and list them, followed by the total comments count.\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/07_get_post_comments\nbundle install\nruby comments_list.rb https://steemit.com/steem/@steemitblog/dev-portal-update-new-steem-developer-resources\n\n\n\nExample Output\n\nReplies by:\n\tshahabshah\n\tmumin007\n\tbigblueleadsled\n\treseller\n\tlatikasha\n\tdannywill\n\tsteemitag\n\tsequentialvibe\n\txplosive\n\twhatsup\n\tevolved08gsr\n\tsteevc\n\tmightymicke\n\tmarc0o\n\takintunde\n\toliverlai\n\tzufrizal\n\tbitcointravel\n\tvsf\n\tbadribireuen\nTotal replies: 20"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-get-post-details": {
							"id": "tutorials-ruby-get-post-details",
							"title": "RB: Get Post Details",
							"category": "tutorials-ruby",
							"description": "Understand and use the most common fields of the requested content",
		  				"type": "",
							"url": "/#tutorials-rubyget_post_details",
							"content": "Full, runnable src of Get Post Details can be downloaded as part of the RB tutorials repository.\n\n\nIntro\n\nThis tutorial fetches the contents of a single post and explains all data related to that post.\n\nWe will also describe the most commonly used fields from the response object.\n\nSections\n\n\n  Making the api call - Use steem-rb to a specific post\n    \n      Example api call - make the call in code\n      Example api call using script - using our tutorial script\n      Example Output - output from a successful call\n    \n  \n  Post Fields - General use of the method to determine …\n    \n      parent_author - if the content is a root post or reply\n      last_update and created - if the content has been modified\n      cashout_time - if the content has reached payout\n      beneficiaries - reward routes other accounts\n      active_votes - all votes applied\n      json_metadata - things like tags and app\n    \n  \n  Script - Delving into the example script.\n  To Run - Running the example.\n\n\nMaking the api call\n\nTo request a specific post we use the get_content method:\n\napi = Radiator::Api.new\n\napi.get_content(author, permlink) do |content|\n  # .\n  # ... your code here\n  # .\nend\n\n\n\nExample api call\nIf we want to get the post “announcing-the-steem-developer-portal” by user @steemitdev\napi.get_content(\"steemitdev\", \"announcing-the-steem-developer-portal\") do |content| ...\n\n\n\nExample api call using script\nAnd to do the same with our tutorial script\nruby get_post_details.rb https://steemit.com/steemdev/@steemitdev/announcing-the-steem-developer-portal\n\n\n\nExample Output\n\nFrom the example we get the following output from our script\n\nPost by steemitdev\n\ttitle: Announcing the Steem Developer Portal!\n\tpermlink: announcing-the-steem-developer-portal\n\tcategory: steemdev\n\tbody_length: 2342 (381 words)\n\tposted at: 2017-10-30T16:34:27, updated at: 2017-10-30T16:34:27, active at: 2018-04-11T10:34:00\n\tchildren: 66\n\tnet_rshares: 0\n\tvote_rshares: 0\n\tpayout:\n\t\tmax_accepted_payout: 0.000 SBD\n\t\tpercent_steem_dollars: 100.00 %\n\t\tpayout at: 2017-11-06T16:34:27 (235.2 days ago)\n\t\tauthor_rewards: 0.000 SBD\n\t\tcurator_payout_value: 0.000 SBD\n\t\ttotal_payout_value: 0.000 SBD\n\tpromoted: 0.000 SBD\n\ttotal_vote_weight: 0\n\treward_weight: 100.00 %\n\tnet_votes: 181, upvotes: 234, downvotes: 1, unvotes: 0, total: 235, top voter: thejohalfiles\n\tallow_replies: true\n\tallow_votes: true\n\tallow_curation_rewards: true\n\tauthor_reputation: 14487360227924\n\ttags: steemdev, steem, dev\n\tapp: steemit/0.1\n\n\n\nPost fields\n\nMost console applications that use the get_content method are probably looking for the body field.  But there are many other fields to look at.  Let’s break them down by use:\n\nparent_author\n\nIn our script (get_post_details.rb), we use the ruby statement:\n\ncontent.parent_author.empty?\n\n\n\nWith the above idiom, your application can determine if the content is a root post or reply.  If it’s empty, then you’re working with a root post, otherwise, it’s a reply.\n\nOnce you know you’re dealing with a reply, other fields can be useful for additional details.  For instance, root_author, root_permlink, and root_title can be used to figure out what the original post details are, even if the reply is deeply nested.\n\nlast_update and created\n\nIn our script, we use the ruby statement:\n\ncontent.last_update == content.created\n\n\n\nWith the above idiom, your application can determine if the content has been modified since it was originally posted.  If they are the same, then there has been no modification.\n\ncashout_time\n\nIn our script, we use the ruby statement:\n\n(cashout = Time.parse(content.cashout_time + 'Z') - Time.now.utc) &gt; 0\n\n\n\nWith the above idiom, you can use cashout_time to determine if the content has reached payout.  If cashout_time is in the future, the content has not been paid yet.  You can determine the possible future payout by inspecting pending_payout_value.\n\nYou will note that we must parse the string found in content.cashout_time by appending Z (Zulu Time, aka UTC) in order for Time.parse to get the right timezone.\n\nEven before payout, you can determine what the max_accepted_payout is.  Most often, this is set to one of two values by the author:\n\n\n  1000000.000 SBD - Accepted Payout\n  0.000 SBD - Declined Payout\n\n\nIn addition to max_accepted_payout, the author may specify how much of the author reward should be in STEEM Power or liquid rewards.  The most common settings are:\n\n\n  10000 - Maximum Liquid Reward\n  0 - STEEM Power Only\n\n\nOnce the payout time has arrived, it’s possible to determine the split between author and curation by inspecting at author_rewards and curator_payout_value.\n\nbeneficiaries\n\nIn our script, we use the ruby statement:\n\ncontent.beneficiaries.any?\n\n\n\nSome content will have a beneficiaries array.  This is used to determine reward routes any account, up to eight.  Payouts are in STEEM Power and are expressed as a reward percentage of the author reward.\n\nTo display a list of who the beneficiaries are, use the following ruby code, as seen in the example:\n\ncontent.beneficiaries.each do |beneficiary|\n  puts \"\\t\\t#{beneficiary.account}: #{'%.2f %' % (beneficiary.weight / 100.0)}\"\nend\n\n\n\nNote, if you just want an array of beneficiary account names, this will work in a pinch:\n\naccounts = content.beneficiaries.map do |beneficiary|\n  beneficiary.account\nend\n\n\n\nactive_votes\n\nIn our script, we use the ruby statements:\n\nvotes = content.active_votes\nupvotes = votes.select { |v| v.percent &gt; 0 }.size\ndownvotes = votes.select { |v| v.percent &lt; 0 }.size\nunvotes = votes.select { |v| v.percent == 0 }.size\ntop_voter = votes.sort_by { |v| v.rshares.to_i }.last.voter\n\n\n\nThe above idiom splits all vote types and identifies the top voter.  This is because the active_votes field is an array that shows all votes applied to the content, including upvotes, downvotes, and unvotes (where a vote previously cast is revoked).\n\njson_metadata\n\nIn our script, we use the ruby statements:\n\nmetadata = JSON[content.json_metadata || '{}'] rescue {}\ntags = metadata['tags'] || []\napp = metadata['app']\n\n\n\nAs you can see from the above example, json_metadata starts out as a string of JSON that can be parsed to determine things like tags and app.  Other data may be present, depending on the application that created the content.\n\nNote, we’re using rescue in case the json_metadata string contains invalid JSON because there is no validation performed on this field by the blockchain when content is broadcasted.\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\n*&lt;content-url&gt;\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/05_get_post_details\nbundle install\nruby get_post_details.rb &lt;content-url&gt;"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-get-posts": {
							"id": "tutorials-ruby-get-posts",
							"title": "RB: Get Posts",
							"category": "tutorials-ruby",
							"description": "Get Posts by Category",
		  				"type": "",
							"url": "/#tutorials-rubyget_posts",
							"content": "Full, runnable src of Get Posts can be downloaded as part of the RB tutorials repository.\n\n\nThis example will output posts depending on which category is provided as the arguments.\n\nScript\n\nCreate a filed called get_posts_by_category.rb.\n\nThis script will pick a method to call based on the arguments passed.  The expected categories are:\n\n\n  trending\n  hot\n  active\n  created\n  votes\n  promoted\n  children\n\n\nWe will base the name of the API method to execute on the provided argument.  Once we know which method to execute, we can build the query options.  The defaults for this script is limit: 10 and tag: ''.\n\nFor each post we retrieve, we are going to build up a summary to display the interesting fields.  In this case, we’re interested in:\n\n\n  Creation Timestamp\n  Title\n  Author\n  Net Votes\n  Number of replies\n  If it’s promoted\n  Number of words in the body\n  Canonical URL\n\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/04_get_posts\nbundle install\nruby get_posts_by_category.rb trending 1 steem\n\n\n\nExample Output\n\n2018-05-24 06:38:33 UTC\n  Post: New Phone App For Steemit - Wow!\n  By: happymoneyman\n  Votes: 1087\n  Replies: 332\n  Promoted: 0.001 SBD\n  Words: 190\n  https://steemit.com/steemit/@happymoneyman/new-phone-app-for-steemit-wow\n\n\n\nError Handling\n\nWe’re checking the result for error in case the remote node has an issue to raise.  Normally, it will be nil, but if it’s populated, output error.message and exit."
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-get-voters-list-on-post": {
							"id": "tutorials-ruby-get-voters-list-on-post",
							"title": "RB: Get Voters List On Post",
							"category": "tutorials-ruby",
							"description": "This example will output the active vote totals for the postcomment passed as an argument to the script",
		  				"type": "",
							"url": "/#tutorials-rubyget_voters_list_on_post",
							"content": "Full, runnable src of Get Voters List On Post can be downloaded as part of the RB tutorials repository.\n\n\nScript\n\nFirst, we ask the blockchain for the active votes on a post or comment.  Then, we count the upvotes, downvotes, and unvotes (which are votes that have been removed after being cast in a previous transaction).\n\nThen, we sort the votes by rshares to find the top voter.\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/06_get_voters_list_on_post\nbundle install\nruby voter_list.rb https://steemit.com/steemdev/@steemitdev/announcing-the-steem-developer-portal\n\n\n\nExample Output\n\nUpvotes: 231\nDownvotes: 1\nUnvotes: 0\nTotal: 232\nTop Voter: thejohalfiles"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-getting-started": {
							"id": "tutorials-ruby-getting-started",
							"title": "RB: Getting Started",
							"category": "tutorials-ruby",
							"description": "To access the Steem blockchain using Ruby install the Radiator gem httpsgithubcominertia186radiatorhttpsgithubcominertia186radiator  Full documentation on Radiator api methods are hosted on rubydocinfohttpwwwrubydocinfogemsradiator",
		  				"type": "",
							"url": "/#tutorials-rubygetting_started",
							"content": "Full, runnable src of Getting Started can be downloaded as part of the RB tutorials repository.\n\n\nSetup\n\nThe following is a minimal Gemfile for running .rb files in these examples.\n\nAdd gem 'radiator' to your Gemfile.  Then install the gem:\n\nbundle install\n\n\n\nIt is also possible to install radiator directly with gem:\n\ngem install radiator\n\n\n\nThen, to execute a script without a Gemfile, add to the top of your .rb files:\n\nrequire 'radiator'\n\n\n\nThen, use the ruby command with radiator specified:\n\nruby -r radiator myscript.rb\n\n\n\nExamples\n\nThe tutorials on this site are available within this site’s repository.  To get a copy, clone this repository, change directory to devportal/_includes/tutorials-ruby and do a bundle install to install the required local gems.\n\nFrom there, you can see all of the .rb files referenced on this site.\n\ngit clone https://github.com/steemit/devportal.git\ncd devportal/_includes/tutorials-ruby/\nbundle install\n\n\n\nTypical-Usage\n\nMost methods can be accessed by creating an instance of Radiator::Api.  It is also possible to specify a different node by passing a url option.\n\nRadiator also internally supports failover by specifying the failover_urls option.\n\nTo use the defaults:\n\napi = Radiator::Api.new\n\n\n\nTo override the url option:\n\napi = Radiator::Api.new(url: 'https://rpc.steemliberator.com')\n\n\n\nTo override both url and failover_urls options:\n\noptions = {\n  url: 'https://rpc.steemliberator.com',\n  failover_urls: [\n    'https://gtg.steem.house:8090',\n    'https://steemd.minnowsupportproject.org',\n    'https://steemd.privex.io',\n  ]\n}\napi = Radiator::Api.new(options)\n\n\n\nNext Step\n\nIf you’d like to dive right into the first tutorial, have a look at: Blog Feed"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-reblogging-post": {
							"id": "tutorials-ruby-reblogging-post",
							"title": "RB: Reblogging Post",
							"category": "tutorials-ruby",
							"description": "To reblog resteem a post we can use a custom json operation that is handled by the follow plugin",
		  				"type": "",
							"url": "/#tutorials-rubyreblogging_post",
							"content": "Full, runnable src of Reblogging Post can be downloaded as part of the RB tutorials repository.\n\n\nFor this operation, we will use custom_json and a properly formed id and payload so that follow_plugin will pick up the reblog data and display the selected post in the feed of the account doing the reblog.\n\nSections\n\n\n  Making the api call - broadcasting the operation\n    \n      Example api call - make the call in code\n      Example api call using script - using our tutorial script\n      Example Output - output from a successful call\n      Example Error - error output from a unsuccessful call\n    \n  \n  Custom JSON Fields - understanding the result\n  To Run - Running the example.\n\n\nMaking the api call\n\nTo broadcast the operation, we can use a Radiator::Transaction instance:\n\ntx = Radiator::Transaction.new\n\n\ntx.process(true)\n\n\n\nPassing true to Radiator::Transaction#process will broadcast the operations queued in the operations array of the transaction.\n\nExample api call\n\nIf we want to reblog, we need to form the json properly, for example:\n\ndata = [\n  :reblog, {\n    account: reblogger,\n    author: author,\n    permlink: permlink\n  }\n]\n\ntx.operations &lt;&lt; {\n  type: :custom_json,\n  id: 'follow',\n  required_auths: [],\n  required_posting_auths: [reblogger],\n  json: data.to_json\n}\n\n\n\nExample api call using script\n\nAnd to do the same with our tutorial script:\n\nruby reblogging_post.rb https://steemit.com/@inertia/kinda-spooky\n\n\n\nExample Output\n\nFrom the example we get the following output from our script:\n\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"id\": \"0aa41e06b2612315d32cadeb671eb1201f266dd7\",\n    \"block_num\": 24063620,\n    \"trx_num\": 19,\n    \"expired\": false\n  },\n  \"id\": 3\n}\n\n\n\nThe response we get after broadcasting the transaction gives us the transaction id (0aa41e0...), block number (24063620), and the transaction number of that block (19).\n\nExample Error\n\nIf a post has already been reblogged by the account, we will get back an error:\n\n{\n  \"jsonrpc\": \"2.0\",\n  \"error\": {\n    \"code\": -32000,\n    \"message\": \"Assert Exception:blog_itr == blog_comment_idx.end(): Account has already reblogged this post\",\n    \"data\": {\n      \"code\": 10,\n      \"name\": \"assert_exception\",\n      \"message\": \"Assert Exception\",\n      \"stack\": [\n        {\n          \"context\": {\n            \"level\": \"error\",\n            \"file\": \"follow_evaluators.cpp\",\n            \"line\": 143,\n            \"method\": \"do_apply\",\n            \"hostname\": \"\",\n            \"timestamp\": \"2018-07-10T21:33:11\"\n          },\n          \"format\": \"blog_itr == blog_comment_idx.end(): Account has already reblogged this post\",\n          \"data\": {\n          }\n        },\n        {\n          \"context\": {\n            \"level\": \"warn\",\n            \"file\": \"follow_evaluators.cpp\",\n            \"line\": 216,\n            \"method\": \"do_apply\",\n            \"hostname\": \"\",\n            \"timestamp\": \"2018-07-10T21:33:11\"\n          },\n          \"format\": \"\",\n          \"data\": {\n            \"o\": {\n              \"account\": \"social\",\n              \"author\": \"inertia\",\n              \"permlink\": \"kinda-spooky\"\n            }\n          }\n        },\n        {\n          \"context\": {\n            \"level\": \"warn\",\n            \"file\": \"generic_custom_operation_interpreter.hpp\",\n            \"line\": 195,\n            \"method\": \"apply\",\n            \"hostname\": \"\",\n            \"timestamp\": \"2018-07-10T21:33:11\"\n          },\n          \"format\": \"\",\n          \"data\": {\n            \"outer_o\": {\n              \"required_auths\": [\n\n              ],\n              \"required_posting_auths\": [\n                \"social\"\n              ],\n              \"id\": \"follow\",\n              \"json\": \"[\\\"reblog\\\",{\\\"account\\\":\\\"social\\\",\\\"author\\\":\\\"inertia\\\",\\\"permlink\\\":\\\"kinda-spooky\\\"}]\"\n            }\n          }\n        },\n        {\n          \"context\": {\n            \"level\": \"warn\",\n            \"file\": \"database.cpp\",\n            \"line\": 3221,\n            \"method\": \"_apply_transaction\",\n            \"hostname\": \"\",\n            \"timestamp\": \"2018-07-10T21:33:11\"\n          },\n          \"format\": \"\",\n          \"data\": {\n            \"op\": {\n              \"type\": \"custom_json_operation\",\n              \"value\": {\n                \"required_auths\": [\n\n                ],\n                \"required_posting_auths\": [\n                  \"social\"\n                ],\n                \"id\": \"follow\",\n                \"json\": \"[\\\"reblog\\\",{\\\"account\\\":\\\"social\\\",\\\"author\\\":\\\"inertia\\\",\\\"permlink\\\":\\\"kinda-spooky\\\"}]\"\n              }\n            }\n          }\n        },\n        {\n          \"context\": {\n            \"level\": \"warn\",\n            \"file\": \"database.cpp\",\n            \"line\": 3227,\n            \"method\": \"_apply_transaction\",\n            \"hostname\": \"\",\n            \"timestamp\": \"2018-07-10T21:33:11\"\n          },\n          \"format\": \"\",\n          \"data\": {\n            \"trx\": {\n              \"ref_block_num\": 12404,\n              \"ref_block_prefix\": 1445149887,\n              \"expiration\": \"2018-07-10T21:43:09\",\n              \"operations\": [\n                {\n                  \"type\": \"custom_json_operation\",\n                  \"value\": {\n                    \"required_auths\": [\n\n                    ],\n                    \"required_posting_auths\": [\n                      \"social\"\n                    ],\n                    \"id\": \"follow\",\n                    \"json\": \"[\\\"reblog\\\",{\\\"account\\\":\\\"social\\\",\\\"author\\\":\\\"inertia\\\",\\\"permlink\\\":\\\"kinda-spooky\\\"}]\"\n                  }\n                }\n              ],\n              \"extensions\": [\n\n              ],\n              \"signatures\": [\n                \"1c063e22868f107dbafaa0452d86cfe19894f2f7fc3ea46b5c73dc7906edcd88244548f001c1d128aa07f862819e80e2f46b6cd74c6769d1d48ef4ad1f147b4dab\"\n              ]\n            }\n          }\n        },\n        {\n          \"context\": {\n            \"level\": \"warn\",\n            \"file\": \"database.cpp\",\n            \"line\": 788,\n            \"method\": \"push_transaction\",\n            \"hostname\": \"\",\n            \"timestamp\": \"2018-07-10T21:33:11\"\n          },\n          \"format\": \"\",\n          \"data\": {\n            \"trx\": {\n              \"ref_block_num\": 12404,\n              \"ref_block_prefix\": 1445149887,\n              \"expiration\": \"2018-07-10T21:43:09\",\n              \"operations\": [\n                {\n                  \"type\": \"custom_json_operation\",\n                  \"value\": {\n                    \"required_auths\": [\n\n                    ],\n                    \"required_posting_auths\": [\n                      \"social\"\n                    ],\n                    \"id\": \"follow\",\n                    \"json\": \"[\\\"reblog\\\",{\\\"account\\\":\\\"social\\\",\\\"author\\\":\\\"inertia\\\",\\\"permlink\\\":\\\"kinda-spooky\\\"}]\"\n                  }\n                }\n              ],\n              \"extensions\": [\n\n              ],\n              \"signatures\": [\n                \"1c063e22868f107dbafaa0452d86cfe19894f2f7fc3ea46b5c73dc7906edcd88244548f001c1d128aa07f862819e80e2f46b6cd74c6769d1d48ef4ad1f147b4dab\"\n              ]\n            }\n          }\n        }\n      ]\n    }\n  },\n  \"id\": 3\n}\n\n\n\nThis indicates that the operation was not included in the blockchain because it was already reblogged in the past.\n\nCustom JSON Fields\n\nBroadcasting a custom_json operation will require the following fields:\n\n\n  id - set to follow to indicate that this operation is handled by the follow_plugin\n  required_auths - leave this as an empty JSON Array, we only need the posting authority\n  required_posting_auths - JSON Array containing the account name with the posting authority\n  json - the actual payload of the operation, containing a JSON Array:\n    \n      First element - reblog\n      Second element - JSON Object containing:\n        \n          account - account that is doing the reblog op\n          author - author of the post being reblogged\n          permlink - permlink of the post being reblogged\n        \n      \n    \n  \n\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\n\n  &lt;url&gt;\n\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/14_reblogging_post\nbundle install\nruby reblogging_post.rb &lt;url&gt;"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-search-accounts": {
							"id": "tutorials-ruby-search-accounts",
							"title": "RB: Search Accounts",
							"category": "tutorials-ruby",
							"description": "Performing a search on account by names starting with a given input",
		  				"type": "",
							"url": "/#tutorials-rubysearch_accounts",
							"content": "Full, runnable src of Search Accounts can be downloaded as part of the RB tutorials repository.\n\n\nThis tutorial will return account names matching the input given, up to a specified limit.\n\nSections\n\n\n  Making the api call - performing the lookup\n    \n      Example api call - make the call in code\n      Example api call using script - using our tutorial script\n      Example Output - output from a successful call\n    \n  \n  To Run - Running the example.\n\n\nMaking the api call\n\nTo request the a list of accounts starting with a particular lookup pattern, we can use the lookup_accounts method:\n\napi = Radiator::Api.new\n\napi.lookup_accounts(lower_bound_name, limit) do |accounts|\n  puts accounts.join(' ')\nend\n\n\n\nNotice, the above example can request up to 1000 accounts as an array.\n\nExample api call\n\nIf we want to get the accounts starting with “alice” …\n\napi.lookup_accounts(\"alice\", 10) do |content| ...\n\n\n\nExample api call using script\n\nAnd to do the same with our tutorial script, which has its own default limit of 10:\n\nruby search_accounts.rb alice\n\n\n\nExample Output\n\nFrom the example we get the following output from our script:\n\nalice alice-22 alice-is alice-labardo alice-mikhaylova alice-n-chains alice-radster alice-sandra alice-thuigh alice-way\n\n\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\n\n  &lt;lower-bound-name&gt;\n  [limit] (optional)\n\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/15_search_accounts\nbundle install\nruby search_accounts.rb &lt;lower-bound-name&gt; [limit]"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-search-tags": {
							"id": "tutorials-ruby-search-tags",
							"title": "RB: Search Tags",
							"category": "tutorials-ruby",
							"description": "Performing a search for tags",
		  				"type": "",
							"url": "/#tutorials-rubysearch_tags",
							"content": "Full, runnable src of Search Tags can be downloaded as part of the RB tutorials repository.\n\n\nThis tutorial will return tags sorted by trending, up to a specified limit.\n\nSections\n\n\n  Making the api call - performing the lookup\n    \n      Example api call - make the call in code\n      Example api call using script - using our tutorial script\n      Example Output - output from a successful call\n      Tag Fields - details of fields returned\n    \n  \n  To Run - Running the example.\n\n\nMaking the api call\n\nTo request the a list of tags, we can use the get_trending_tags method:\n\napi = Radiator::Api.new\n\napi.get_trending_tags(nil, 100) do |tags|\n  puts tags\nend\n\n\n\nNotice, the above example can request up to 100 tags as an array.\n\nExample api call\n\nIf we want to get 10 tags starting from the tag named “music” …\n\napi.get_trending_tags(\"music\", 10) do |content| ...\n\n\n\nExample api call using script\n\nAnd to do the same with our tutorial script, which has its own default limit of 10.  Internally, the api method only allows at most 100 results, so this tutorial will paginate the results to go beyond 100:\n\nruby search_tags.rb\n\n\n\nExample Output\n\nFrom the example we get the following output from our script:\n\ntag: &lt;empty&gt;, total_payouts: 57513246.041 SBD, net_votes: 47471936, top_posts: 4523493, comments: 27287924, trending: 100430269400\ntag: life, total_payouts: 12563434.550 SBD, net_votes: 10898489, top_posts: 1193059, comments: 1164873, trending: 7440962326\ntag: photography, total_payouts: 7529111.644 SBD, net_votes: 8578110, top_posts: 819008, comments: 1498469, trending: 7311205387\ntag: kr, total_payouts: 2953387.067 SBD, net_votes: 749380, top_posts: 79842, comments: 2138776, trending: 7009078414\ntag: steemit, total_payouts: 8531217.920 SBD, net_votes: 5393375, top_posts: 580400, comments: 1156174, trending: 5471456871\ntag: art, total_payouts: 4017591.434 SBD, net_votes: 3577651, top_posts: 330597, comments: 716566, trending: 3302526197\ntag: bitcoin, total_payouts: 3556944.650 SBD, net_votes: 2885034, top_posts: 416088, comments: 625529, trending: 3284115413\ntag: introduceyourself, total_payouts: 1863437.063 SBD, net_votes: 725570, top_posts: 24891, comments: 986875, trending: 3185017448\ntag: spanish, total_payouts: 1221282.258 SBD, net_votes: 2683931, top_posts: 154983, comments: 827033, trending: 3103643123\ntag: travel, total_payouts: 3976626.578 SBD, net_votes: 2505962, top_posts: 229401, comments: 622754, trending: 2687292306\n\n\n\nTag fields\n\nTags in the results of get_trending_tags returns the following fields:\n\n\n  name - Name of the tag or empty.\n  total_payouts - Rewards paid in this tag.\n  net_votes - Net votes in this tag.\n  top_posts - Top votes in this tag.\n  comments - Number of comments in this tag.\n  trending - Total trending.\n\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\n\n  [limit] (optional)\n\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/16_search_tags\nbundle install\nruby search_tags.rb [limit]"
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-submit-comment-reply": {
							"id": "tutorials-ruby-submit-comment-reply",
							"title": "RB: Submit Comment Reply",
							"category": "tutorials-ruby",
							"description": "By the end of this tutorial you should know how to prepare comments for Steem and then submit using Radiator",
		  				"type": "",
							"url": "/#tutorials-rubysubmit_comment_reply",
							"content": "Full, runnable src of Submit Comment Reply can be downloaded as part of the RB tutorials repository.\n\n\nIntro\n\nThis example will broadcast a reply to the blockchain using the values provided.  To create a post in ruby, we will use a Radiator::Transaction containing a comment operation, which is how all content is stored internally.\n\nA reply is differentiated from a post by whether or not a parent_author exists. When there is no parent_author, then it’s a post, otherwise it’s a comment (like in this example).\n\nScript\n\nYou should change wif to the posting key that matches your author.  This script will pass along the values as a comment operation:\n\n\n  author - Account name of the author currently replying.\n  permlink - Value unique to the author\n  parent_author - The name of the author of the being replied to, in the case of a reply like this example.\n  parent_permlink - The permlink of the content being replied to, in the case of a reply like this example.\n  title - Typically empty.\n  body - The actual content of the post.\n  json_metadata - JSON containing the parent_permlink of the root post as a tags array.\n\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/11_submit_comment_reply\nbundle install\nruby submit_comment_reply.rb\n\n\n\nExample Output\n\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"id\": \"3fef14cac921e9baa7b31e43245e5380f3fb4332\",\n    \"block_num\": 23355115,\n    \"trx_num\": 13,\n    \"expired\": false\n  },\n  \"id\": 3\n}\n\n\n\nThe response we get after broadcasting the transaction gives us the transaction id (3fef14c...), block number (22867626), and the transaction number of that block (13).\n\nError Handling\n\nWe’re checking the result for error in case the remote node has an issue to raise.  Normally, it will be nil, but if it’s populated, output error.message and exit."
						}
						
					
				
			
				
					
						,
						
						"tutorials-ruby-submit-post": {
							"id": "tutorials-ruby-submit-post",
							"title": "RB: Submit Post",
							"category": "tutorials-ruby",
							"description": "This example will broadcast a new post to the blockchain using the values provided  To create a post in ruby we will use a RadiatorTransaction containing a comment operation which is how all content is stored internally",
		  				"type": "",
							"url": "/#tutorials-rubysubmit_post",
							"content": "Full, runnable src of Submit Post can be downloaded as part of the RB tutorials repository.\n\n\nA post is differentiated from a comment by whether or not a parent_author exists. When there is no parent_author, then it’s a post, otherwise it’s a comment.\n\nScript\n\nYou should change wif to the posting key that matches your author.  This script will pass along the values as a comment operation:\n\n\n  author - Account name of the author currently posting.\n  permlink - Value unique to the author\n  parent_author - An empty string, in the case of a root post like this example.\n  parent_permlink - The first tag, in the case of a root post like this example.\n  title - Human readable title.\n  body - The actual content of the post.\n  json_metadata - JSON containing all of the tags.\n\n\nTo Run\n\nFirst, set up your workstation using the steps provided in Getting Started.  Then you can create and execute the script (or clone from this repository):\n\ngit clone git@github.com:steemit/devportal-tutorials-rb.git\ncd devportal-tutorials-rb/tutorials/10_submit_post\nbundle install\nruby submit_a_new_post.rb\n\n\n\nExample Output\n\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"id\": \"768f7f64cee94413da0017ef79f592bb4da86baf\",\n    \"block_num\": 22867626,\n    \"trx_num\": 43,\n    \"expired\": false\n  },\n  \"id\": 1\n}\n\n\n\nThe response we get after broadcasting the transaction gives us the transaction id (768f7f6...), block number (22867626), and the transaction number of that block (43).\n\nError Handling\n\nWe’re checking the result for error in case the remote node has an issue to raise.  Normally, it will be nil, but if it’s populated, output error.message and exit."
						}
						
					
				
			
		
	};
</script>

	<script src="/js/lunr.min.js"></script>
	<script src="/js/search.js"></script>


</div>
<div class="footer">
	<a href="#">Back to top</a>
</div>
<script>
    document.getElementById("open-nav").addEventListener("click", function () {
        document.body.classList.toggle("nav-open");
    });
</script>
</body>
</html>


<script src="/js/adjust.js"></script>

